From 3b6e64957f54dfb951102b93ead0ba890daf8311 Mon Sep 17 00:00:00 2001 From: Jamie Bowley Date: Thu, 15 Oct 2020 13:07:37 +0100 Subject: [PATCH 1/2] inline css files in AMP pages --- packages/next/pages/_document.tsx | 58 +++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/packages/next/pages/_document.tsx b/packages/next/pages/_document.tsx index 715d5b136bc40..41819e4347a65 100644 --- a/packages/next/pages/_document.tsx +++ b/packages/next/pages/_document.tsx @@ -17,6 +17,8 @@ import { } from '../next-server/server/get-page-files' import { cleanAmpPath } from '../next-server/server/utils' import { htmlEscapeJsonString } from '../server/htmlescape' +import { readFileSync } from 'fs' +import { join } from 'path' export { DocumentContext, DocumentInitialProps, DocumentProps } @@ -157,12 +159,8 @@ export class Head extends Component< context!: React.ContextType - getCssLinks(files: DocumentFiles): JSX.Element[] | null { - const { - assetPrefix, - devOnlyCacheBusterQueryString, - dynamicImports, - } = this.context + getCssFiles(files: DocumentFiles): string[] { + const { dynamicImports } = this.context const cssFiles = files.allFiles.filter((f) => f.endsWith('.css')) const sharedFiles = new Set(files.sharedFiles) @@ -177,6 +175,41 @@ export class Head extends Component< cssFiles.push(...dynamicCssFiles) } + return cssFiles + } + + getAmpCss( + files: DocumentFiles, + curStyles: React.ReactElement[] + ): JSX.Element | null { + const cssFromFiles = this.getCssFiles(files) + .map((file) => readFileSync(join('.next', file), { encoding: 'utf-8' })) + .join('') + const cssFromElements = curStyles + .map((style) => style.props.dangerouslySetInnerHTML.__html) + .join('') + .replace(/\/\*# sourceMappingURL=.*\*\//g, '') + .replace(/\/\*@ sourceURL=.*?\*\//g, '') + + if (cssFromFiles || cssFromElements) { + return ( +