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
17 KiB
Text
1 line
No EOL
17 KiB
Text
{"version":3,"sources":["../../../../src/build/webpack/loaders/next-metadata-route-loader.ts"],"sourcesContent":["import type webpack from 'webpack'\nimport fs from 'fs'\nimport path from 'path'\nimport { imageExtMimeTypeMap } from '../../../lib/mime-type'\nimport { getLoaderModuleNamedExports } from './utils'\n\nfunction errorOnBadHandler(resourcePath: string) {\n return `\n if (typeof handler !== 'function') {\n throw new Error('Default export is missing in ${JSON.stringify(\n resourcePath\n )}')\n }\n `\n}\n\n/* re-export the userland route configs */\nasync function createReExportsCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n const exportNames = await getLoaderModuleNamedExports(\n resourcePath,\n loaderContext\n )\n // Re-export configs but avoid conflicted exports\n const reExportNames = exportNames.filter(\n (name) =>\n name !== 'default' &&\n name !== 'generateSitemaps' &&\n name !== 'dynamicParams'\n )\n\n return reExportNames.length > 0\n ? `export { ${reExportNames.join(', ')} } from ${JSON.stringify(\n resourcePath\n )}\\n`\n : ''\n}\n\nconst CACHE_HEADERS = {\n NO_CACHE: 'no-cache, no-store',\n REVALIDATE: 'public, max-age=0, must-revalidate',\n}\n\nexport type MetadataRouteLoaderOptions = {\n // Using separate argument to avoid json being parsed and hit error\n // x-ref: https://github.com/vercel/next.js/pull/62615\n filePath: string\n isDynamicRouteExtension: '1' | '0'\n}\n\nexport function getFilenameAndExtension(resourcePath: string) {\n const filename = path.basename(resourcePath)\n const [name, ext] = filename.split('.', 2)\n return {\n name,\n ext,\n }\n}\n\nfunction getContentType(resourcePath: string) {\n let { name, ext } = getFilenameAndExtension(resourcePath)\n if (ext === 'jpg') ext = 'jpeg'\n\n if (name === 'favicon' && ext === 'ico') return 'image/x-icon'\n if (name === 'sitemap') return 'application/xml'\n if (name === 'robots') return 'text/plain'\n if (name === 'manifest') return 'application/manifest+json'\n\n if (ext === 'png' || ext === 'jpeg' || ext === 'ico' || ext === 'svg') {\n return imageExtMimeTypeMap[ext]\n }\n return 'text/plain'\n}\n\nasync function getStaticAssetRouteCode(\n resourcePath: string,\n fileBaseName: string\n) {\n const cache =\n process.env.NODE_ENV !== 'production'\n ? CACHE_HEADERS.NO_CACHE\n : CACHE_HEADERS.REVALIDATE\n\n const isTwitter = fileBaseName === 'twitter-image'\n const isOpenGraph = fileBaseName === 'opengraph-image'\n // Twitter image file size limit is 5MB.\n // General Open Graph image file size limit is 8MB.\n // x-ref: https://developer.x.com/en/docs/x-for-websites/cards/overview/summary\n // x-ref(facebook): https://developers.facebook.com/docs/sharing/webmasters/images\n const fileSizeLimit = isTwitter ? 5 : 8\n const imgName = isTwitter ? 'Twitter' : 'Open Graph'\n\n const code = `\\\n/* static asset route */\nimport { NextResponse } from 'next/server'\n\nconst contentType = ${JSON.stringify(getContentType(resourcePath))}\nconst buffer = Buffer.from(${JSON.stringify(\n (await fs.promises.readFile(resourcePath)).toString('base64')\n )}, 'base64'\n )\n\nif (${isTwitter || isOpenGraph}) {\n const fileSizeInMB = buffer.byteLength / 1024 / 1024\n if (fileSizeInMB > ${fileSizeLimit}) {\n throw new Error('File size for ${imgName} image ${JSON.stringify(resourcePath)} exceeds ${fileSizeLimit}MB. ' +\n \\`(Current: \\${fileSizeInMB.toFixed(2)}MB)\\n\\` +\n 'Read more: https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image#image-files-jpg-png-gif'\n )\n }\n}\n\nexport function GET() {\n return new NextResponse(buffer, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': ${JSON.stringify(cache)},\n },\n })\n}\n\nexport const dynamic = 'force-static'\n`\n return code\n}\n\nasync function getDynamicTextRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n return `\\\n/* dynamic asset route */\nimport { NextResponse } from 'next/server'\nimport handler from ${JSON.stringify(resourcePath)}\nimport { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'\n\nconst contentType = ${JSON.stringify(getContentType(resourcePath))}\nconst fileType = ${JSON.stringify(getFilenameAndExtension(resourcePath).name)}\n\n${errorOnBadHandler(resourcePath)}\n${await createReExportsCode(resourcePath, loaderContext)}\n\nexport async function GET() {\n const data = await handler()\n const content = resolveRouteData(data, fileType)\n\n return new NextResponse(content, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': ${JSON.stringify(CACHE_HEADERS.REVALIDATE)},\n },\n })\n}\n`\n}\n\nasync function getDynamicImageRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n return `\\\n/* dynamic image route with generateImageMetadata */\nimport { NextResponse } from 'next/server'\nimport { default as handler, generateImageMetadata } from ${JSON.stringify(resourcePath)}\n\n${errorOnBadHandler(resourcePath)}\n${await createReExportsCode(resourcePath, loaderContext)}\n\nexport async function GET(_, ctx) {\n const paramsPromise = ctx.params\n const idPromise = paramsPromise.then(params => params?.__metadata_id__)\n const restParamsPromise = paramsPromise.then(params => {\n if (!params) return undefined\n const { __metadata_id__, ...rest } = params\n return rest\n })\n\n const restParams = await restParamsPromise\n const __metadata_id__ = await idPromise\n const imageMetadata = await generateImageMetadata({ params: restParams })\n const id = imageMetadata.find((item) => {\n if (item?.id == null) {\n throw new Error('id property is required for every item returned from generateImageMetadata')\n }\n\n return item.id.toString() === __metadata_id__\n })?.id\n\n if (id == null) {\n return new NextResponse('Not Found', {\n status: 404,\n })\n }\n\n return handler({ params: restParamsPromise, id: idPromise })\n}\n\nexport async function generateStaticParams({ params }) {\n const imageMetadata = await generateImageMetadata({ params })\n const staticParams = []\n\n for (const item of imageMetadata) {\n if (item?.id == null) {\n throw new Error('id property is required for every item returned from generateImageMetadata')\n }\n staticParams.push({ __metadata_id__: item.id.toString() })\n }\n return staticParams\n}\n`\n}\n\nasync function getSingleImageRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n return `\\\n/* dynamic image route without generateImageMetadata */\nimport { NextResponse } from 'next/server'\nimport { default as handler } from ${JSON.stringify(resourcePath)}\n\n${errorOnBadHandler(resourcePath)}\n${await createReExportsCode(resourcePath, loaderContext)}\n\nexport async function GET(_, ctx) {\n return handler({ params: ctx.params })\n}\n`\n}\n\n// <metadata-image>/[id]/route.js\nasync function getImageRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n const exportNames = await getLoaderModuleNamedExports(\n resourcePath,\n loaderContext\n )\n\n const hasGenerateParamsExport = exportNames.includes('generateImageMetadata')\n\n if (hasGenerateParamsExport) {\n return getDynamicImageRouteCode(resourcePath, loaderContext)\n } else {\n return getSingleImageRouteCode(resourcePath, loaderContext)\n }\n}\n\nasync function getSingleSitemapRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n return `\\\n/* single sitemap route */\nimport { NextResponse } from 'next/server'\nimport { default as handler } from ${JSON.stringify(resourcePath)}\nimport { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'\n\nconst contentType = ${JSON.stringify(getContentType(resourcePath))}\nconst fileType = ${JSON.stringify(getFilenameAndExtension(resourcePath).name)}\n\n${errorOnBadHandler(resourcePath)}\n${await createReExportsCode(resourcePath, loaderContext)}\n\nexport async function GET() {\n const data = await handler()\n const content = resolveRouteData(data, fileType)\n\n return new NextResponse(content, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': ${JSON.stringify(CACHE_HEADERS.REVALIDATE)},\n },\n })\n}\n`\n}\n\nasync function getDynamicSitemapRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n const code = `\\\n/* dynamic sitemap route with generateSitemaps */\nimport { NextResponse } from 'next/server'\nimport { default as handler, generateSitemaps } from ${JSON.stringify(resourcePath)}\nimport { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'\n\nconst contentType = ${JSON.stringify(getContentType(resourcePath))}\nconst fileType = ${JSON.stringify(getFilenameAndExtension(resourcePath).name)}\n\n${errorOnBadHandler(resourcePath)}\n${await createReExportsCode(resourcePath, loaderContext)}\n\nexport async function GET(_, ctx) {\n const paramsPromise = ctx.params\n const idPromise = paramsPromise.then(params => params?.__metadata_id__)\n\n const id = await idPromise\n const hasXmlExtension = id ? id.endsWith('.xml') : false\n const sitemaps = await generateSitemaps()\n let foundId\n for (const item of sitemaps) {\n if (item?.id == null) {\n throw new Error('id property is required for every item returned from generateSitemaps')\n }\n\n const baseId = id && hasXmlExtension ? id.slice(0, -4) : undefined\n if (item.id.toString() === baseId) {\n foundId = item.id\n }\n }\n if (foundId == null) {\n return new NextResponse('Not Found', {\n status: 404,\n })\n }\n\n const targetIdPromise = idPromise.then(id => {\n const hasXmlExtension = id ? id.endsWith('.xml') : false\n return id && hasXmlExtension ? id.slice(0, -4) : undefined\n })\n const data = await handler({ id: targetIdPromise })\n const content = resolveRouteData(data, fileType)\n\n return new NextResponse(content, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': ${JSON.stringify(CACHE_HEADERS.REVALIDATE)},\n },\n })\n}\n\nexport async function generateStaticParams() {\n const sitemaps = await generateSitemaps()\n const params = []\n\n for (const item of sitemaps) {\n if (item?.id == null) {\n throw new Error('id property is required for every item returned from generateSitemaps')\n }\n params.push({ __metadata_id__: item.id.toString() + '.xml' })\n }\n return params\n}\n`\n return code\n}\n\n// <metadata-sitemap>/[id]/route.js\nasync function getSitemapRouteCode(\n resourcePath: string,\n loaderContext: webpack.LoaderContext<any>\n) {\n const exportNames = await getLoaderModuleNamedExports(\n resourcePath,\n loaderContext\n )\n\n const hasGenerateSitemaps = exportNames.includes('generateSitemaps')\n\n if (hasGenerateSitemaps) {\n return getDynamicSitemapRouteCode(resourcePath, loaderContext)\n } else {\n return getSingleSitemapRouteCode(resourcePath, loaderContext)\n }\n}\n\n// When it's static route, it could be favicon.ico, sitemap.xml, robots.txt etc.\n// TODO-METADATA: improve the cache control strategy\nconst nextMetadataRouterLoader: webpack.LoaderDefinitionFunction<MetadataRouteLoaderOptions> =\n async function () {\n const { isDynamicRouteExtension, filePath } = this.getOptions()\n const { name: fileBaseName } = getFilenameAndExtension(filePath)\n this.addDependency(filePath)\n\n let code = ''\n if (isDynamicRouteExtension === '1') {\n if (fileBaseName === 'robots' || fileBaseName === 'manifest') {\n code = await getDynamicTextRouteCode(filePath, this)\n } else if (fileBaseName === 'sitemap') {\n code = await getSitemapRouteCode(filePath, this)\n } else {\n code = await getImageRouteCode(filePath, this)\n }\n } else {\n code = await getStaticAssetRouteCode(filePath, fileBaseName)\n }\n\n return code\n }\n\nexport default nextMetadataRouterLoader\n"],"names":["getFilenameAndExtension","errorOnBadHandler","resourcePath","JSON","stringify","createReExportsCode","loaderContext","exportNames","getLoaderModuleNamedExports","reExportNames","filter","name","length","join","CACHE_HEADERS","NO_CACHE","REVALIDATE","filename","path","basename","ext","split","getContentType","imageExtMimeTypeMap","getStaticAssetRouteCode","fileBaseName","cache","process","env","NODE_ENV","isTwitter","isOpenGraph","fileSizeLimit","imgName","code","fs","promises","readFile","toString","getDynamicTextRouteCode","getDynamicImageRouteCode","getSingleImageRouteCode","getImageRouteCode","hasGenerateParamsExport","includes","getSingleSitemapRouteCode","getDynamicSitemapRouteCode","getSitemapRouteCode","hasGenerateSitemaps","nextMetadataRouterLoader","isDynamicRouteExtension","filePath","getOptions","addDependency"],"mappings":";;;;;;;;;;;;;;;IA2YA,OAAuC;eAAvC;;IAvVgBA,uBAAuB;eAAvBA;;;2DAnDD;6DACE;0BACmB;uBACQ;;;;;;AAE5C,SAASC,kBAAkBC,YAAoB;IAC7C,OAAO,CAAC;;kDAEwC,EAAEC,KAAKC,SAAS,CAC5DF,cACA;;EAEJ,CAAC;AACH;AAEA,wCAAwC,GACxC,eAAeG,oBACbH,YAAoB,EACpBI,aAAyC;IAEzC,MAAMC,cAAc,MAAMC,IAAAA,kCAA2B,EACnDN,cACAI;IAEF,iDAAiD;IACjD,MAAMG,gBAAgBF,YAAYG,MAAM,CACtC,CAACC,OACCA,SAAS,aACTA,SAAS,sBACTA,SAAS;IAGb,OAAOF,cAAcG,MAAM,GAAG,IAC1B,CAAC,SAAS,EAAEH,cAAcI,IAAI,CAAC,MAAM,QAAQ,EAAEV,KAAKC,SAAS,CAC3DF,cACA,EAAE,CAAC,GACL;AACN;AAEA,MAAMY,gBAAgB;IACpBC,UAAU;IACVC,YAAY;AACd;AASO,SAAShB,wBAAwBE,YAAoB;IAC1D,MAAMe,WAAWC,aAAI,CAACC,QAAQ,CAACjB;IAC/B,MAAM,CAACS,MAAMS,IAAI,GAAGH,SAASI,KAAK,CAAC,KAAK;IACxC,OAAO;QACLV;QACAS;IACF;AACF;AAEA,SAASE,eAAepB,YAAoB;IAC1C,IAAI,EAAES,IAAI,EAAES,GAAG,EAAE,GAAGpB,wBAAwBE;IAC5C,IAAIkB,QAAQ,OAAOA,MAAM;IAEzB,IAAIT,SAAS,aAAaS,QAAQ,OAAO,OAAO;IAChD,IAAIT,SAAS,WAAW,OAAO;IAC/B,IAAIA,SAAS,UAAU,OAAO;IAC9B,IAAIA,SAAS,YAAY,OAAO;IAEhC,IAAIS,QAAQ,SAASA,QAAQ,UAAUA,QAAQ,SAASA,QAAQ,OAAO;QACrE,OAAOG,6BAAmB,CAACH,IAAI;IACjC;IACA,OAAO;AACT;AAEA,eAAeI,wBACbtB,YAAoB,EACpBuB,YAAoB;IAEpB,MAAMC,QACJC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eACrBf,cAAcC,QAAQ,GACtBD,cAAcE,UAAU;IAE9B,MAAMc,YAAYL,iBAAiB;IACnC,MAAMM,cAAcN,iBAAiB;IACrC,wCAAwC;IACxC,mDAAmD;IACnD,+EAA+E;IAC/E,kFAAkF;IAClF,MAAMO,gBAAgBF,YAAY,IAAI;IACtC,MAAMG,UAAUH,YAAY,YAAY;IAExC,MAAMI,OAAO,CAAC;;;;oBAII,EAAE/B,KAAKC,SAAS,CAACkB,eAAepB,eAAe;2BACxC,EAAEC,KAAKC,SAAS,CACvC,AAAC,CAAA,MAAM+B,WAAE,CAACC,QAAQ,CAACC,QAAQ,CAACnC,aAAY,EAAGoC,QAAQ,CAAC,WACpD;;;IAGA,EAAER,aAAaC,YAAY;;qBAEV,EAAEC,cAAc;mCACF,EAAEC,QAAQ,OAAO,EAAE9B,KAAKC,SAAS,CAACF,cAAc,SAAS,EAAE8B,cAAc;;;;;;;;;;;uBAWrF,EAAE7B,KAAKC,SAAS,CAACsB,OAAO;;;;;;AAM/C,CAAC;IACC,OAAOQ;AACT;AAEA,eAAeK,wBACbrC,YAAoB,EACpBI,aAAyC;IAEzC,OAAO,CAAC;;;oBAGU,EAAEH,KAAKC,SAAS,CAACF,cAAc;;;oBAG/B,EAAEC,KAAKC,SAAS,CAACkB,eAAepB,eAAe;iBAClD,EAAEC,KAAKC,SAAS,CAACJ,wBAAwBE,cAAcS,IAAI,EAAE;;AAE9E,EAAEV,kBAAkBC,cAAc;AAClC,EAAE,MAAMG,oBAAoBH,cAAcI,eAAe;;;;;;;;;uBASlC,EAAEH,KAAKC,SAAS,CAACU,cAAcE,UAAU,EAAE;;;;AAIlE,CAAC;AACD;AAEA,eAAewB,yBACbtC,YAAoB,EACpBI,aAAyC;IAEzC,OAAO,CAAC;;;0DAGgD,EAAEH,KAAKC,SAAS,CAACF,cAAc;;AAEzF,EAAED,kBAAkBC,cAAc;AAClC,EAAE,MAAMG,oBAAoBH,cAAcI,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CzD,CAAC;AACD;AAEA,eAAemC,wBACbvC,YAAoB,EACpBI,aAAyC;IAEzC,OAAO,CAAC;;;mCAGyB,EAAEH,KAAKC,SAAS,CAACF,cAAc;;AAElE,EAAED,kBAAkBC,cAAc;AAClC,EAAE,MAAMG,oBAAoBH,cAAcI,eAAe;;;;;AAKzD,CAAC;AACD;AAEA,iCAAiC;AACjC,eAAeoC,kBACbxC,YAAoB,EACpBI,aAAyC;IAEzC,MAAMC,cAAc,MAAMC,IAAAA,kCAA2B,EACnDN,cACAI;IAGF,MAAMqC,0BAA0BpC,YAAYqC,QAAQ,CAAC;IAErD,IAAID,yBAAyB;QAC3B,OAAOH,yBAAyBtC,cAAcI;IAChD,OAAO;QACL,OAAOmC,wBAAwBvC,cAAcI;IAC/C;AACF;AAEA,eAAeuC,0BACb3C,YAAoB,EACpBI,aAAyC;IAEzC,OAAO,CAAC;;;mCAGyB,EAAEH,KAAKC,SAAS,CAACF,cAAc;;;oBAG9C,EAAEC,KAAKC,SAAS,CAACkB,eAAepB,eAAe;iBAClD,EAAEC,KAAKC,SAAS,CAACJ,wBAAwBE,cAAcS,IAAI,EAAE;;AAE9E,EAAEV,kBAAkBC,cAAc;AAClC,EAAE,MAAMG,oBAAoBH,cAAcI,eAAe;;;;;;;;;uBASlC,EAAEH,KAAKC,SAAS,CAACU,cAAcE,UAAU,EAAE;;;;AAIlE,CAAC;AACD;AAEA,eAAe8B,2BACb5C,YAAoB,EACpBI,aAAyC;IAEzC,MAAM4B,OAAO,CAAC;;;qDAGqC,EAAE/B,KAAKC,SAAS,CAACF,cAAc;;;oBAGhE,EAAEC,KAAKC,SAAS,CAACkB,eAAepB,eAAe;iBAClD,EAAEC,KAAKC,SAAS,CAACJ,wBAAwBE,cAAcS,IAAI,EAAE;;AAE9E,EAAEV,kBAAkBC,cAAc;AAClC,EAAE,MAAMG,oBAAoBH,cAAcI,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAoClC,EAAEH,KAAKC,SAAS,CAACU,cAAcE,UAAU,EAAE;;;;;;;;;;;;;;;;;AAiBlE,CAAC;IACC,OAAOkB;AACT;AAEA,mCAAmC;AACnC,eAAea,oBACb7C,YAAoB,EACpBI,aAAyC;IAEzC,MAAMC,cAAc,MAAMC,IAAAA,kCAA2B,EACnDN,cACAI;IAGF,MAAM0C,sBAAsBzC,YAAYqC,QAAQ,CAAC;IAEjD,IAAII,qBAAqB;QACvB,OAAOF,2BAA2B5C,cAAcI;IAClD,OAAO;QACL,OAAOuC,0BAA0B3C,cAAcI;IACjD;AACF;AAEA,gFAAgF;AAChF,oDAAoD;AACpD,MAAM2C,2BACJ;IACE,MAAM,EAAEC,uBAAuB,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,UAAU;IAC7D,MAAM,EAAEzC,MAAMc,YAAY,EAAE,GAAGzB,wBAAwBmD;IACvD,IAAI,CAACE,aAAa,CAACF;IAEnB,IAAIjB,OAAO;IACX,IAAIgB,4BAA4B,KAAK;QACnC,IAAIzB,iBAAiB,YAAYA,iBAAiB,YAAY;YAC5DS,OAAO,MAAMK,wBAAwBY,UAAU,IAAI;QACrD,OAAO,IAAI1B,iBAAiB,WAAW;YACrCS,OAAO,MAAMa,oBAAoBI,UAAU,IAAI;QACjD,OAAO;YACLjB,OAAO,MAAMQ,kBAAkBS,UAAU,IAAI;QAC/C;IACF,OAAO;QACLjB,OAAO,MAAMV,wBAAwB2B,UAAU1B;IACjD;IAEA,OAAOS;AACT;MAEF,WAAee","ignoreList":[0]} |