From 7656596625304eefedccab1bf1c9c38a523abd52 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 10 Jun 2024 17:01:43 +0200 Subject: [PATCH] Apply metadata next route loader directly to source files --- .../build/webpack/loaders/next-app-loader.ts | 4 +- .../loaders/next-metadata-route-loader.ts | 6 +- .../app/favicon.ico | Bin 0 -> 1406 bytes .../app/favicon.ico.new | Bin 0 -> 5430 bytes .../app/opengraph-image.png | Bin 0 -> 1545 bytes .../app/opengraph-image.png.new | Bin 0 -> 46715 bytes .../metadata-static-route-cache.test.ts | 52 ++++++++++++++++++ 7 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 test/production/app-dir/metadata-static-route-cache/app/favicon.ico create mode 100644 test/production/app-dir/metadata-static-route-cache/app/favicon.ico.new create mode 100644 test/production/app-dir/metadata-static-route-cache/app/opengraph-image.png create mode 100644 test/production/app-dir/metadata-static-route-cache/app/opengraph-image.png.new create mode 100644 test/production/app-dir/metadata-static-route-cache/metadata-static-route-cache.test.ts diff --git a/packages/next/src/build/webpack/loaders/next-app-loader.ts b/packages/next/src/build/webpack/loaders/next-app-loader.ts index 728cc5f8427ee..88dd398a624ae 100644 --- a/packages/next/src/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/src/build/webpack/loaders/next-app-loader.ts @@ -127,10 +127,8 @@ async function createAppRouteCode({ const isDynamicRouteExtension = pageExtensions.includes(ext) resolvedPagePath = `next-metadata-route-loader?${stringify({ - page, - filePath: resolvedPagePath, isDynamicRouteExtension: isDynamicRouteExtension ? '1' : '0', - })}!?${WEBPACK_RESOURCE_QUERIES.metadataRoute}` + })}!${resolvedPagePath}?${WEBPACK_RESOURCE_QUERIES.metadataRoute}` } const pathname = new AppPathnameNormalizer().normalize(page) diff --git a/packages/next/src/build/webpack/loaders/next-metadata-route-loader.ts b/packages/next/src/build/webpack/loaders/next-metadata-route-loader.ts index b0cee835f9d40..ce5f357f0269e 100644 --- a/packages/next/src/build/webpack/loaders/next-metadata-route-loader.ts +++ b/packages/next/src/build/webpack/loaders/next-metadata-route-loader.ts @@ -21,10 +21,7 @@ const cacheHeader = { } type MetadataRouteLoaderOptions = { - page: string - filePath: string isDynamicRouteExtension: '1' | '0' - isDynamicMultiRoute: '1' | '0' } export function getFilenameAndExtension(resourcePath: string) { @@ -246,7 +243,8 @@ ${staticGenerationCode} // TODO-METADATA: improve the cache control strategy const nextMetadataRouterLoader: webpack.LoaderDefinitionFunction = async function () { - const { isDynamicRouteExtension, filePath } = this.getOptions() + const { isDynamicRouteExtension } = this.getOptions() + const filePath = this.resourcePath const { name: fileBaseName } = getFilenameAndExtension(filePath) let code = '' diff --git a/test/production/app-dir/metadata-static-route-cache/app/favicon.ico b/test/production/app-dir/metadata-static-route-cache/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..24591070884d908ae1e114bb17148927f4bd3577 GIT binary patch literal 1406 zcmeHEdoa{d6#l$ICG^l!^j5T@s1zww+DI>|C8fRCQc@{1W|Z_W(=?f8@|Y&WRE)<= zW3ootQJF+GWsPBI*gPk(Ye_r1@%wFeSE@h!)Bnz$bIy0Zx!*l=&jIx4v9N&7B8>nm zitMOsDO>7#FriTg#_~V7q3Ale&w8QnsszKZP!ION+^HU-@-kFqcfgic0^_Lf2)NS; z52*@nscpF3!JsfR1EcIH80su_g^GdSH3>d9yhEN!g|E4rL$#8ny;wA) zzl4!vC)Kg2jL%1~S2g;QK47T%1qPbb5J&W(LiiCfnGB|`gXj@u!MJ4vm7(ouyIF^b zxORL=9;A8=k{#j^oybRAO)0X|`oQa35q^15D>C{>v6)dnnFmBE3MBF;_gG1Y{%GTZH%>< zO_m*?U61HEgUEw~7|-&Z7ISRF8Ooek$m01bKNt)!z!*8OfZuFqJ9B8MpOa- literal 0 HcmV?d00001 diff --git a/test/production/app-dir/metadata-static-route-cache/app/favicon.ico.new b/test/production/app-dir/metadata-static-route-cache/app/favicon.ico.new new file mode 100644 index 0000000000000000000000000000000000000000..82339b3b1dbbcf4550b737faf99c7774196fb8cb GIT binary patch literal 5430 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 literal 0 HcmV?d00001 diff --git a/test/production/app-dir/metadata-static-route-cache/app/opengraph-image.png.new b/test/production/app-dir/metadata-static-route-cache/app/opengraph-image.png.new new file mode 100644 index 0000000000000000000000000000000000000000..b7bb4dc1497bac8e6f4c339b760dcecbc67de692 GIT binary patch literal 46715 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 Sp zOVd&fKiPEUh{fCxHkoy8=)A-CtH)I3Yjrg%8!S} zSFCh)i?o;Sb1Q7@D&|z^Mi&XET{9A~t=zT1c}nqU8BeD+qhx7!>(*x-iP@<(NoKCf zS&3Cb{KzFh(Mx)8+J&3by}!B7eJ`S( zw*K@OWFw>NKstq?i^$lpqE_#_4=x&d7;X{7<-BkHy8GtJ^=Edal?`rq9i?_4)2c1? zh(M;8dR%HsS7xGy-bRb0k5y z@0m$Oc}{cmlFQPjB_&~oA|6NIiapQF!SAHC?%26ZK2yd-F(xU?4wqFf?px4tB&&Ks zNy&w_;1YR>rr<2$I?rN}Ye~^vM+Q=(*SC$ain8fTO|h5$buA&odc)sHw_wRZ&7xbjahcT?_gg zkColKyl%&A`KQq-Zr_7qQ{24lkC=Jy<$s>~)in8>V^fAkTdLEg0lB|Qc$c)bso~m9 zZbq?It!{Brrh6~!^$zLiD{Ased~4O@5$Dl#x5QQK!gX`ErY@O%>!W<^Gt;oQ<0tHY zEX{xLH}qE_ib-7$4>~IKU6q^K@u%0AW4<)MBBqU~SOd}m2JLABn;VAy%0okjF28bT zRn=46%#oR?y-RIsQ=*`Yt4MNYTQgQ}Oh-<0igb~1>^6rsB~$*6)aFjlI77UoihWa8 zbg{54iCgfYJfro+W42WtP-|;_e7*eh=}A7fH#S#nz3~0*^XEfGu{Oi6QEi;|+^wRs z&V1-ZuJ@3IjY)aC`G&NP)Y&OMPpT3ZSYOQ4d>7yuW?1|sjxm!rzL1DUMo_&AxG|SN;O-8gU}{K)Lt z#s!fNR!n+srrIQ*q}XX?e7@>yc5-LU*K9uzqPAUz)A8Y&v5B@up(Z9h-r#ZtYVEDMFxY+%F{y*+N zbjZK))~fjB47-MAi~AQa!U0K0((2@_zsXZpQK7A&`i~TkbU0O8Ngh zvMh-a)i-j<-~as%lrQ>t%O}t8xC|G6|NSyc$bbJSx&HSrsNDhgi6iSe{$axZd4K{W z`jHDKF5|Yx{&&*;Z({y$V*YQ({NIlGe+3fcLjM=a{(pYP{2m%9DzV^5<>jY}Bk(_U N6|GG%8+M=ie*nVr4@Lk0 literal 0 HcmV?d00001 diff --git a/test/production/app-dir/metadata-static-route-cache/metadata-static-route-cache.test.ts b/test/production/app-dir/metadata-static-route-cache/metadata-static-route-cache.test.ts new file mode 100644 index 0000000000000..9bc2dd31abddf --- /dev/null +++ b/test/production/app-dir/metadata-static-route-cache/metadata-static-route-cache.test.ts @@ -0,0 +1,52 @@ +import { nextTestSetup } from 'e2e-utils' +import crypto from 'crypto' + +function generateMD5(text: string) { + const hash = crypto.createHash('md5') + hash.update(text) + return hash.digest('hex') +} + +describe('app dir - metadata static routes cache', () => { + const { next } = nextTestSetup({ + files: __dirname, + skipStart: true, + }) + + it('should generate different content after replace the static metadata file', async () => { + await next.build() + + const faviconBuildContent = await next.readFile( + '.next/server/app/favicon.ico.body' + ) + const opengrpahImageBuildContent = await next.readFile( + '.next/server/app/opengraph-image.png.body' + ) + + const faviconMd5 = generateMD5(faviconBuildContent) + const opengraphImageMd5 = generateMD5(opengrpahImageBuildContent) + + // Update favicon and opengraph image + const newFaviconContent = await next.readFile('app/favicon.ico.new') + await next.patchFile('app/favicon.ico', newFaviconContent) + + const newOpengraphImageContent = await next.readFile( + 'app/opengraph-image.png.new' + ) + await next.patchFile('app/opengraph-image.png', newOpengraphImageContent) + + await next.build() + const faviconBuildContentNew = await next.readFile( + '.next/server/app/favicon.ico.body' + ) + const opengrpahImageBuildContentNew = await next.readFile( + '.next/server/app/opengraph-image.png.body' + ) + + const faviconMd5New = generateMD5(faviconBuildContentNew) + const opengraphImageMd5New = generateMD5(opengrpahImageBuildContentNew) + + expect(faviconMd5).not.toBe(faviconMd5New) + expect(opengraphImageMd5).not.toBe(opengraphImageMd5New) + }) +})