diff --git a/packages/next/src/build/flying-shuttle/stitch-builds.ts b/packages/next/src/build/flying-shuttle/stitch-builds.ts index acc3667cb39ae..9e4d254c9470e 100644 --- a/packages/next/src/build/flying-shuttle/stitch-builds.ts +++ b/packages/next/src/build/flying-shuttle/stitch-builds.ts @@ -17,7 +17,6 @@ import { APP_BUILD_MANIFEST, APP_PATH_ROUTES_MANIFEST, APP_PATHS_MANIFEST, - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, BUILD_MANIFEST, CLIENT_REFERENCE_MANIFEST, FUNCTIONS_CONFIG_MANIFEST, @@ -366,22 +365,6 @@ export async function stitchBuilds( )}` ) - // for server/font-manifest.json we just merge the arrays - for (const file of [AUTOMATIC_FONT_OPTIMIZATION_MANIFEST]) { - const [restoreFontManifest, currentFontManifest] = await Promise.all( - [ - path.join(shuttleDir, 'server', file), - path.join(distDir, 'server', file), - ].map(async (f) => JSON.parse(await fs.promises.readFile(f, 'utf8'))) - ) - const mergedFontManifest = [...restoreFontManifest, ...currentFontManifest] - - await fs.promises.writeFile( - path.join(distDir, 'server', file), - JSON.stringify(mergedFontManifest, null, 2) - ) - } - // for server/functions-config-manifest.json we just merge // the functions field const [restoreFunctionsConfigManifest, currentFunctionsConfigManifest] = diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 65b2e3de7d875..8fb3a445b5c83 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -52,7 +52,6 @@ import { CLIENT_STATIC_FILES_PATH, EXPORT_DETAIL, EXPORT_MARKER, - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, IMAGES_MANIFEST, PAGES_MANIFEST, PHASE_PRODUCTION_BUILD, @@ -2342,12 +2341,6 @@ export default async function build( ] : []), REACT_LOADABLE_MANIFEST, - config.optimizeFonts - ? path.join( - SERVER_DIRECTORY, - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST - ) - : null, BUILD_ID_FILE, path.join(SERVER_DIRECTORY, NEXT_FONT_MANIFEST + '.js'), path.join(SERVER_DIRECTORY, NEXT_FONT_MANIFEST + '.json'), @@ -2469,10 +2462,6 @@ export default async function build( featureName: 'experimental/nextScriptWorkers', invocationCount: config.experimental.nextScriptWorkers ? 1 : 0, }, - { - featureName: 'optimizeFonts', - invocationCount: config.optimizeFonts ? 1 : 0, - }, { featureName: 'experimental/ppr', invocationCount: config.experimental.ppr ? 1 : 0, diff --git a/packages/next/src/build/webpack-config.ts b/packages/next/src/build/webpack-config.ts index 82d8553973544..9efaff195e2c4 100644 --- a/packages/next/src/build/webpack-config.ts +++ b/packages/next/src/build/webpack-config.ts @@ -1856,20 +1856,6 @@ export default async function getBaseWebpackConfig( clientRouterFilters, }), new ProfilingPlugin({ runWebpackSpan, rootDir: dir }), - config.optimizeFonts && - !dev && - isNodeServer && - (function () { - const { FontStylesheetGatheringPlugin } = - require('./webpack/plugins/font-stylesheet-gathering-plugin') as { - FontStylesheetGatheringPlugin: typeof import('./webpack/plugins/font-stylesheet-gathering-plugin').FontStylesheetGatheringPlugin - } - return new FontStylesheetGatheringPlugin({ - adjustFontFallbacks: config.experimental.adjustFontFallbacks, - adjustFontFallbacksWithSizeAdjust: - config.experimental.adjustFontFallbacksWithSizeAdjust, - }) - })(), new WellKnownErrorsPlugin(), isClient && new CopyFilePlugin({ @@ -2071,7 +2057,6 @@ export default async function getBaseWebpackConfig( buildActivityPosition: config.devIndicators.buildActivityPosition, productionBrowserSourceMaps: !!config.productionBrowserSourceMaps, reactStrictMode: config.reactStrictMode, - optimizeFonts: config.optimizeFonts, optimizeCss: config.experimental.optimizeCss, nextScriptWorkers: config.experimental.nextScriptWorkers, scrollRestoration: config.experimental.scrollRestoration, diff --git a/packages/next/src/build/webpack/plugins/define-env-plugin.ts b/packages/next/src/build/webpack/plugins/define-env-plugin.ts index cc7aac3d0317e..54efea18085a4 100644 --- a/packages/next/src/build/webpack/plugins/define-env-plugin.ts +++ b/packages/next/src/build/webpack/plugins/define-env-plugin.ts @@ -235,7 +235,6 @@ export function getDefineEnv({ 'process.env.__NEXT_STRICT_MODE_APP': // When next.config.js does not have reactStrictMode it's enabled by default. config.reactStrictMode === null ? true : config.reactStrictMode, - 'process.env.__NEXT_OPTIMIZE_FONTS': !dev && config.optimizeFonts, 'process.env.__NEXT_OPTIMIZE_CSS': (config.experimental.optimizeCss && !dev) ?? false, 'process.env.__NEXT_SCRIPT_WORKERS': diff --git a/packages/next/src/build/webpack/plugins/font-stylesheet-gathering-plugin.ts b/packages/next/src/build/webpack/plugins/font-stylesheet-gathering-plugin.ts deleted file mode 100644 index 612a8ced3d820..0000000000000 --- a/packages/next/src/build/webpack/plugins/font-stylesheet-gathering-plugin.ts +++ /dev/null @@ -1,259 +0,0 @@ -import { - webpack, - BasicEvaluatedExpression, - sources, -} from 'next/dist/compiled/webpack/webpack' -import { - getFontDefinitionFromNetwork, - getFontOverrideCss, -} from '../../../server/font-utils' -import type { FontManifest } from '../../../server/font-utils' -import postcss from 'postcss' -import minifier from 'next/dist/compiled/cssnano-simple' -import { - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, - OPTIMIZED_FONT_PROVIDERS, -} from '../../../shared/lib/constants' -import * as Log from '../../output/log' - -function minifyCss(css: string): Promise { - return postcss([ - minifier( - { - excludeAll: true, - discardComments: true, - normalizeWhitespace: { exclude: false }, - }, - postcss - ), - ]) - .process(css, { from: undefined }) - .then((res) => res.css) -} - -function isNodeCreatingLinkElement(node: any) { - const callee = node.callee as any - if (callee.type !== 'Identifier') { - return false - } - const componentNode = node.arguments[0] as any - if (componentNode.type !== 'Literal') { - return false - } - // React has pragma: _jsx. - // Next has pragma: __jsx. - return ( - (callee.name === '_jsx' || callee.name === '__jsx') && - componentNode.value === 'link' - ) -} - -export class FontStylesheetGatheringPlugin { - compiler?: webpack.Compiler - gatheredStylesheets: Array = [] - manifestContent: FontManifest = [] - adjustFontFallbacks?: boolean - adjustFontFallbacksWithSizeAdjust?: boolean - - constructor({ - adjustFontFallbacks, - adjustFontFallbacksWithSizeAdjust, - }: { - adjustFontFallbacks?: boolean - adjustFontFallbacksWithSizeAdjust?: boolean - }) { - this.adjustFontFallbacks = adjustFontFallbacks - this.adjustFontFallbacksWithSizeAdjust = adjustFontFallbacksWithSizeAdjust - } - - private parserHandler = ( - factory: ReturnType - ): void => { - const JS_TYPES = ['auto', 'esm', 'dynamic'] - // Do an extra walk per module and add interested visitors to the walk. - for (const type of JS_TYPES) { - factory.hooks.parser - .for('javascript/' + type) - .tap(this.constructor.name, (parser: any) => { - /** - * Webpack fun facts: - * `parser.hooks.call.for` cannot catch calls for user defined identifiers like `__jsx` - * it can only detect calls for native objects like `window`, `this`, `eval` etc. - * In order to be able to catch calls of variables like `__jsx`, first we need to catch them as - * Identifier and then return `BasicEvaluatedExpression` whose `id` and `type` webpack matches to - * invoke hook for call. - * See: https://github.com/webpack/webpack/blob/webpack-4/lib/Parser.js#L1931-L1932. - */ - parser.hooks.evaluate - .for('Identifier') - .tap(this.constructor.name, (node: any) => { - // We will only optimize fonts from first party code. - if (parser?.state?.module?.resource.includes('node_modules')) { - return - } - let result - if (node.name === '_jsx' || node.name === '__jsx') { - result = new BasicEvaluatedExpression() - // @ts-ignore - result.setRange(node.range) - result.setExpression(node) - result.setIdentifier(node.name) - - // This was added in webpack 5. - result.getMembers = () => [] - } - return result - }) - - const jsxNodeHandler = (node: any) => { - if (node.arguments.length !== 2) { - // A font link tag has only two arguments rel=stylesheet and href='...' - return - } - if (!isNodeCreatingLinkElement(node)) { - return - } - - // node.arguments[0] is the name of the tag and [1] are the props. - const arg1 = node.arguments[1] - - const propsNode = - arg1.type === 'ObjectExpression' ? (arg1 as any) : undefined - const props: { [key: string]: string } = {} - if (propsNode) { - propsNode.properties.forEach((prop: any) => { - if (prop.type !== 'Property') { - return - } - if ( - prop.key.type === 'Identifier' && - prop.value.type === 'Literal' - ) { - props[prop.key.name] = prop.value.value as string - } - }) - } - - if ( - !props.rel || - props.rel !== 'stylesheet' || - !props.href || - !OPTIMIZED_FONT_PROVIDERS.some(({ url }) => - props.href.startsWith(url) - ) - ) { - return false - } - - this.gatheredStylesheets.push(props.href) - - const buildInfo = parser?.state?.module?.buildInfo - - if (buildInfo) { - buildInfo.valueDependencies.set( - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, - this.gatheredStylesheets - ) - } - } - - // React JSX transform: - parser.hooks.call - .for('_jsx') - .tap(this.constructor.name, jsxNodeHandler) - // Next.js JSX transform: - parser.hooks.call - .for('__jsx') - .tap(this.constructor.name, jsxNodeHandler) - // New React JSX transform: - parser.hooks.call - .for('imported var') - .tap(this.constructor.name, jsxNodeHandler) - }) - } - } - - public apply(compiler: webpack.Compiler) { - this.compiler = compiler - compiler.hooks.normalModuleFactory.tap( - this.constructor.name, - this.parserHandler - ) - compiler.hooks.make.tapAsync(this.constructor.name, (compilation, cb) => { - compilation.hooks.finishModules.tapAsync( - this.constructor.name, - async (modules: any, modulesFinished: Function) => { - let fontStylesheets = this.gatheredStylesheets - - const fontUrls = new Set() - modules.forEach((module: any) => { - const fontDependencies = module?.buildInfo?.valueDependencies?.get( - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST - ) - if (fontDependencies) { - fontDependencies.forEach((v: string) => fontUrls.add(v)) - } - }) - - fontStylesheets = Array.from(fontUrls) - - const fontDefinitionPromises = fontStylesheets.map((url) => - getFontDefinitionFromNetwork(url) - ) - - this.manifestContent = [] - for (let promiseIndex in fontDefinitionPromises) { - let css = await fontDefinitionPromises[promiseIndex] - - if (this.adjustFontFallbacks) { - css += getFontOverrideCss( - fontStylesheets[promiseIndex], - css, - this.adjustFontFallbacksWithSizeAdjust - ) - } - - if (css) { - try { - const content = await minifyCss(css) - this.manifestContent.push({ - url: fontStylesheets[promiseIndex], - content, - }) - } catch (err) { - Log.warn( - `Failed to minify the stylesheet for ${fontStylesheets[promiseIndex]}. Skipped optimizing this font.` - ) - console.error(err) - } - } - } - - // @ts-expect-error invalid assets type - compilation.assets[AUTOMATIC_FONT_OPTIMIZATION_MANIFEST] = - new sources.RawSource( - JSON.stringify(this.manifestContent, null, ' ') - ) - - modulesFinished() - } - ) - cb() - }) - - compiler.hooks.make.tap(this.constructor.name, (compilation) => { - compilation.hooks.processAssets.tap( - { - name: this.constructor.name, - stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS, - }, - (assets: any) => { - assets['../' + AUTOMATIC_FONT_OPTIMIZATION_MANIFEST] = - new sources.RawSource( - JSON.stringify(this.manifestContent, null, ' ') - ) - } - ) - }) - } -} diff --git a/packages/next/src/export/index.ts b/packages/next/src/export/index.ts index c07ef81859132..100bec73f21b2 100644 --- a/packages/next/src/export/index.ts +++ b/packages/next/src/export/index.ts @@ -44,7 +44,6 @@ import { loadEnvConfig } from '@next/env' import { isAPIRoute } from '../lib/is-api-route' import { getPagePath } from '../server/require' import type { Span } from '../trace' -import type { FontConfig } from '../server/font-utils' import type { MiddlewareManifest } from '../build/webpack/plugins/middleware-plugin' import { isAppRouteRoute } from '../lib/is-app-route-route' import { isAppPageRoute } from '../lib/is-app-page-route' @@ -340,7 +339,6 @@ async function exportAppImpl( optimizeCss: nextConfig.experimental.optimizeCss, nextConfigOutput: nextConfig.output, nextScriptWorkers: nextConfig.experimental.nextScriptWorkers, - optimizeFonts: nextConfig.optimizeFonts as FontConfig, largePageDataBytes: nextConfig.experimental.largePageDataBytes, serverActions: nextConfig.experimental.serverActions, serverComponents: enabledDirectories.app, diff --git a/packages/next/src/export/routes/pages.ts b/packages/next/src/export/routes/pages.ts index a42ae2e82b2e7..eb42799bb9689 100644 --- a/packages/next/src/export/routes/pages.ts +++ b/packages/next/src/export/routes/pages.ts @@ -87,16 +87,10 @@ export async function exportPagesPage( } } else { /** - * This sets environment variable to be used at the time of static export by head.tsx. + * This sets environment variable to be used at the time of SSR by head.tsx. * Using this from process.env allows targeting SSR by calling - * `process.env.__NEXT_OPTIMIZE_FONTS`. - * TODO(prateekbh@): Remove this when experimental.optimizeFonts are being cleaned up. + * `process.env.__NEXT_OPTIMIZE_CSS`. */ - if (renderOpts.optimizeFonts) { - process.env.__NEXT_OPTIMIZE_FONTS = JSON.stringify( - renderOpts.optimizeFonts - ) - } if (renderOpts.optimizeCss) { process.env.__NEXT_OPTIMIZE_CSS = JSON.stringify(true) } diff --git a/packages/next/src/export/types.ts b/packages/next/src/export/types.ts index 5542ec19306de..47001e32a2f72 100644 --- a/packages/next/src/export/types.ts +++ b/packages/next/src/export/types.ts @@ -4,7 +4,6 @@ import type { RenderOptsPartial as PagesRenderOptsPartial } from '../server/rend import type { LoadComponentsReturnType } from '../server/load-components' import type { OutgoingHttpHeaders } from 'http' import type AmpHtmlValidator from 'next/dist/compiled/amphtml-validator' -import type { FontConfig } from '../server/font-utils' import type { ExportPathMap, NextConfigComplete } from '../server/config-shared' import type { Revalidate } from '../server/lib/revalidate' import type { @@ -70,7 +69,6 @@ export interface ExportPageInput { buildExport?: boolean serverRuntimeConfig: { [key: string]: any } subFolders?: boolean - optimizeFonts: FontConfig optimizeCss: any disableOptimizedLoading: any parentSpanId: number diff --git a/packages/next/src/export/worker.ts b/packages/next/src/export/worker.ts index fc630c55247ce..15fe38ac90d6e 100644 --- a/packages/next/src/export/worker.ts +++ b/packages/next/src/export/worker.ts @@ -18,7 +18,6 @@ import fs from 'fs/promises' import { loadComponents } from '../server/load-components' import { isDynamicRoute } from '../shared/lib/router/utils/is-dynamic' import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path' -import { requireFontManifest } from '../server/require' import { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path' import { trace } from '../trace' import { setHttpClientAndAgentOptions } from '../server/setup-http-agent-env' @@ -70,7 +69,6 @@ async function exportPageImpl( buildExport = false, serverRuntimeConfig, subFolders = false, - optimizeFonts, optimizeCss, disableOptimizedLoading, debugOutput = false, @@ -252,10 +250,8 @@ async function exportPageImpl( ...input.renderOpts, ampPath: renderAmpPath, params, - optimizeFonts, optimizeCss, disableOptimizedLoading, - fontManifest: optimizeFonts ? requireFontManifest(distDir) : undefined, locale, supportsDynamicResponse: false, experimental: { @@ -379,7 +375,6 @@ export async function exportPages( serverRuntimeConfig: nextConfig.serverRuntimeConfig, subFolders: nextConfig.trailingSlash && !options.buildExport, buildExport: options.buildExport, - optimizeFonts: nextConfig.optimizeFonts, optimizeCss: nextConfig.experimental.optimizeCss, disableOptimizedLoading: nextConfig.experimental.disableOptimizedLoading, diff --git a/packages/next/src/lib/turbopack-warning.ts b/packages/next/src/lib/turbopack-warning.ts index 05a1368dd9512..b43bb004dda27 100644 --- a/packages/next/src/lib/turbopack-warning.ts +++ b/packages/next/src/lib/turbopack-warning.ts @@ -29,8 +29,6 @@ const unsupportedTurbopackNextConfigOptions = [ // 'experimental.serverMinification', // 'experimental.serverSourceMaps', - 'experimental.adjustFontFallbacks', - 'experimental.adjustFontFallbacksWithSizeAdjust', 'experimental.allowedRevalidateHeaderKeys', 'experimental.extensionAlias', 'experimental.fallbackNodePolyfills', diff --git a/packages/next/src/pages/_document.tsx b/packages/next/src/pages/_document.tsx index 48410acbe208c..5b8bd7bb62829 100644 --- a/packages/next/src/pages/_document.tsx +++ b/packages/next/src/pages/_document.tsx @@ -1,9 +1,5 @@ import React, { type JSX } from 'react' -import type { ReactElement, ReactNode } from 'react' -import { - OPTIMIZED_FONT_PROVIDERS, - NEXT_BUILTIN_DOCUMENT, -} from '../shared/lib/constants' +import { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants' import type { DocumentContext, DocumentInitialProps, @@ -433,7 +429,6 @@ export class Head extends React.Component { dynamicImports, crossOrigin, optimizeCss, - optimizeFonts, } = this.context const cssFiles = files.allFiles.filter((f) => f.endsWith('.css')) const sharedFiles: Set = new Set(files.sharedFiles) @@ -488,12 +483,6 @@ export class Head extends React.Component { ) }) - if (process.env.NODE_ENV !== 'development' && optimizeFonts) { - cssLinkElements = this.makeStylesheetInert( - cssLinkElements - ) as ReactElement[] - } - return cssLinkElements.length === 0 ? null : cssLinkElements } @@ -623,36 +612,6 @@ export class Head extends React.Component { return getPolyfillScripts(this.context, this.props) } - makeStylesheetInert(node: ReactNode[]): ReactNode[] { - return React.Children.map(node, (c: any) => { - if ( - c?.type === 'link' && - c?.props?.href && - OPTIMIZED_FONT_PROVIDERS.some(({ url }) => - c?.props?.href?.startsWith(url) - ) - ) { - const newProps = { - ...(c.props || {}), - 'data-href': c.props.href, - href: undefined, - } - - return React.cloneElement(c, newProps) - } else if (c?.props?.children) { - const newProps = { - ...(c.props || {}), - children: this.makeStylesheetInert(c.props.children), - } - - return React.cloneElement(c, newProps) - } - - return c - // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]` - })!.filter(Boolean) - } - render() { const { styles, @@ -667,7 +626,6 @@ export class Head extends React.Component { unstable_JsPreload, disableOptimizedLoading, optimizeCss, - optimizeFonts, assetPrefix, nextFontManifest, } = this.context @@ -740,14 +698,6 @@ export class Head extends React.Component { ) } - if ( - process.env.NODE_ENV !== 'development' && - optimizeFonts && - !(process.env.NEXT_RUNTIME !== 'edge' && inAmpMode) - ) { - children = this.makeStylesheetInert(children) - } - let hasAmphtmlRel = false let hasCanonicalRel = false @@ -848,7 +798,6 @@ export class Head extends React.Component { )} {children} - {optimizeFonts && } {nextFontLinkTags.preconnect} {nextFontLinkTags.preload} diff --git a/packages/next/src/server/base-server.ts b/packages/next/src/server/base-server.ts index a4c8095cab7ef..2c1d0359f78a5 100644 --- a/packages/next/src/server/base-server.ts +++ b/packages/next/src/server/base-server.ts @@ -1,5 +1,4 @@ import type { __ApiPreviewProps } from './api-utils' -import type { FontManifest, FontConfig } from './font-utils' import type { LoadComponentsReturnType } from './load-components' import type { MiddlewareRouteMatch } from '../shared/lib/router/utils/middleware-route-matcher' import type { Params } from '../client/components/params' @@ -370,7 +369,6 @@ export default abstract class Server< shouldEnsure?: boolean url?: string }): Promise - protected abstract getFontManifest(): DeepReadonly | undefined protected abstract getPrerenderManifest(): DeepReadonly protected abstract getNextFontManifest(): | DeepReadonly @@ -560,11 +558,6 @@ export default abstract class Server< ampOptimizerConfig: this.nextConfig.experimental.amp?.optimizer, basePath: this.nextConfig.basePath, images: this.nextConfig.images, - optimizeFonts: this.nextConfig.optimizeFonts as FontConfig, - fontManifest: - (this.nextConfig.optimizeFonts as FontConfig) && !dev - ? this.getFontManifest() - : undefined, optimizeCss: this.nextConfig.experimental.optimizeCss, nextConfigOutput: this.nextConfig.output, nextScriptWorkers: this.nextConfig.experimental.nextScriptWorkers, diff --git a/packages/next/src/server/config-schema.ts b/packages/next/src/server/config-schema.ts index 3d363eee8ea10..2376997ac5faa 100644 --- a/packages/next/src/server/config-schema.ts +++ b/packages/next/src/server/config-schema.ts @@ -254,8 +254,6 @@ export const configSchema: zod.ZodType = z.lazy(() => appIsrStatus: z.boolean().optional(), appNavFailHandling: z.boolean().optional(), preloadEntriesOnStart: z.boolean().optional(), - adjustFontFallbacks: z.boolean().optional(), - adjustFontFallbacksWithSizeAdjust: z.boolean().optional(), allowedRevalidateHeaderKeys: z.array(z.string()).optional(), amp: z .object({ @@ -563,7 +561,6 @@ export const configSchema: zod.ZodType = z.lazy(() => pagesBufferLength: z.number().optional(), }) .optional(), - optimizeFonts: z.boolean().optional(), output: z.enum(['standalone', 'export']).optional(), outputFileTracingRoot: z.string().optional(), outputFileTracingExcludes: z diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index f4c5174d405a1..118ce117e2ee0 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -298,8 +298,6 @@ export interface ExperimentalConfig { sri?: { algorithm?: SubresourceIntegrityAlgorithm } - adjustFontFallbacks?: boolean - adjustFontFallbacksWithSizeAdjust?: boolean webVitalsAttribution?: Array<(typeof WEB_VITALS)[number]> @@ -750,15 +748,6 @@ export interface NextConfig extends Record { */ productionBrowserSourceMaps?: boolean - /** - * By default, Next.js will automatically inline font CSS at build time - * - * @default true - * @since version 10.2 - * @see [Font Optimization](https://nextjs.org/docs/basic-features/font-optimization) - */ - optimizeFonts?: boolean - /** * Enable react profiling in production * @@ -963,7 +952,6 @@ export const defaultConfig: NextConfig = { trailingSlash: false, i18n: null, productionBrowserSourceMaps: false, - optimizeFonts: true, excludeDefaultMomentLocales: true, serverRuntimeConfig: {}, publicRuntimeConfig: {}, @@ -1025,8 +1013,6 @@ export const defaultConfig: NextConfig = { disablePostcssPresetEnv: undefined, amp: undefined, urlImports: undefined, - adjustFontFallbacks: false, - adjustFontFallbacksWithSizeAdjust: false, turbo: undefined, turbotrace: undefined, typedRoutes: false, diff --git a/packages/next/src/server/dev/turbopack/manifest-loader.ts b/packages/next/src/server/dev/turbopack/manifest-loader.ts index fd590eb92f2e3..63ab19945a327 100644 --- a/packages/next/src/server/dev/turbopack/manifest-loader.ts +++ b/packages/next/src/server/dev/turbopack/manifest-loader.ts @@ -12,7 +12,6 @@ import type { LoadableManifest } from '../../load-components' import { APP_BUILD_MANIFEST, APP_PATHS_MANIFEST, - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, BUILD_MANIFEST, INTERCEPTION_ROUTE_REWRITE_MANIFEST, MIDDLEWARE_BUILD_MANIFEST, @@ -267,18 +266,6 @@ export class TurbopackManifestLoader { ) } - /** - * Turbopack doesn't support this functionality, so it writes an empty manifest. - */ - private async writeAutomaticFontOptimizationManifest() { - const manifestPath = join( - this.distDir, - 'server', - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST - ) - - await writeFileAtomic(manifestPath, JSON.stringify([])) - } async loadBuildManifest( pageName: string, @@ -664,7 +651,6 @@ export class TurbopackManifestLoader { await this.writeActionManifest() await this.writeAppBuildManifest() await this.writeAppPathsManifest() - await this.writeAutomaticFontOptimizationManifest() await this.writeBuildManifest(entrypoints, devRewrites, productionRewrites) await this.writeFallbackBuildManifest() await this.writeLoadableManifest() diff --git a/packages/next/src/server/font-utils.ts b/packages/next/src/server/font-utils.ts index e968c80e55be3..aa05fac12e2dd 100644 --- a/packages/next/src/server/font-utils.ts +++ b/packages/next/src/server/font-utils.ts @@ -1,67 +1,9 @@ -import * as Log from '../build/output/log' import { - GOOGLE_FONT_PROVIDER, DEFAULT_SERIF_FONT, DEFAULT_SANS_SERIF_FONT, } from '../shared/lib/constants' const capsizeFontsMetrics = require('next/dist/server/capsize-font-metrics.json') -const CHROME_UA = - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36' -const IE_UA = 'Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko' - -export type FontManifest = Array<{ - url: string - content: string -}> - -export type FontConfig = boolean - -function isGoogleFont(url: string): boolean { - return url.startsWith(GOOGLE_FONT_PROVIDER) -} - -async function getFontForUA(url: string, UA: string): Promise { - const res = await fetch(url, { headers: { 'user-agent': UA } }) - return await res.text() -} - -export async function getFontDefinitionFromNetwork( - url: string -): Promise { - let result = '' - /** - * The order of IE -> Chrome is important, other wise chrome starts loading woff1. - * CSS cascading 🤷‍♂️. - */ - try { - if (isGoogleFont(url)) { - result += await getFontForUA(url, IE_UA) - } - result += await getFontForUA(url, CHROME_UA) - } catch (e) { - Log.warn( - `Failed to download the stylesheet for ${url}. Skipped optimizing this font.` - ) - return '' - } - - return result -} - -function parseGoogleFontName(css: string): Array { - const regex = /font-family: ([^;]*)/g - const matches = css.matchAll(regex) - const fontNames = new Set() - - for (let font of matches) { - const fontFamily = font[1].replace(/^['"]|['"]$/g, '') - fontNames.add(fontFamily) - } - - return [...fontNames] -} - function formatName(str: string): string { return str .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { @@ -74,24 +16,6 @@ function formatOverrideValue(val: number) { return Math.abs(val * 100).toFixed(2) } -export function calculateOverrideValues(fontName: string) { - const fontKey = formatName(fontName) - const fontMetrics = capsizeFontsMetrics[fontKey] - let { category, ascent, descent, lineGap, unitsPerEm } = fontMetrics - const fallbackFont = - category === 'serif' ? DEFAULT_SERIF_FONT : DEFAULT_SANS_SERIF_FONT - ascent = formatOverrideValue(ascent / unitsPerEm) - descent = formatOverrideValue(descent / unitsPerEm) - lineGap = formatOverrideValue(lineGap / unitsPerEm) - - return { - ascent, - descent, - lineGap, - fallbackFont: fallbackFont.name, - } -} - export function calculateSizeAdjustValues(fontName: string) { const fontKey = formatName(fontName) const fontMetrics = capsizeFontsMetrics[fontKey] @@ -118,64 +42,3 @@ export function calculateSizeAdjustValues(fontName: string) { sizeAdjust: formatOverrideValue(sizeAdjust), } } - -function calculateOverrideCSS(font: string) { - const fontName = font.trim() - - const { ascent, descent, lineGap, fallbackFont } = - calculateOverrideValues(fontName) - - return ` - @font-face { - font-family: "${fontName} Fallback"; - ascent-override: ${ascent}%; - descent-override: ${descent}%; - line-gap-override: ${lineGap}%; - src: local("${fallbackFont}"); - } - ` -} - -function calculateSizeAdjustCSS(font: string) { - const fontName = font.trim() - - const { ascent, descent, lineGap, fallbackFont, sizeAdjust } = - calculateSizeAdjustValues(fontName) - - return ` - @font-face { - font-family: "${fontName} Fallback"; - ascent-override: ${ascent}%; - descent-override: ${descent}%; - line-gap-override: ${lineGap}%; - size-adjust: ${sizeAdjust}%; - src: local("${fallbackFont}"); - } - ` -} - -export function getFontOverrideCss( - url: string, - css: string, - useSizeAdjust = false -) { - if (!isGoogleFont(url)) { - return '' - } - - const calcFn = useSizeAdjust ? calculateSizeAdjustCSS : calculateOverrideCSS - - try { - const fontNames = parseGoogleFontName(css) - - const fontCss = fontNames.reduce((cssStr, fontName) => { - cssStr += calcFn(fontName) - return cssStr - }, '') - - return fontCss - } catch (e) { - console.log('Error getting font override values - ', e) - return '' - } -} diff --git a/packages/next/src/server/next-server.ts b/packages/next/src/server/next-server.ts index 3c9d3f2c3b9bb..f9aea92c5b76d 100644 --- a/packages/next/src/server/next-server.ts +++ b/packages/next/src/server/next-server.ts @@ -59,13 +59,12 @@ import type { BaseRequestHandler, } from './base-server' import BaseServer, { NoFallbackError } from './base-server' -import { getMaybePagePath, getPagePath, requireFontManifest } from './require' +import { getMaybePagePath, getPagePath } from './require' import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path' import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path' import { loadComponents } from './load-components' import type { LoadComponentsReturnType } from './load-components' import isError, { getProperError } from '../lib/is-error' -import type { FontManifest } from './font-utils' import { splitCookiesString, toNodeOutgoingHttpHeaders } from './web/utils' import { getMiddlewareRouteMatcher } from '../shared/lib/router/utils/middleware-route-matcher' import { loadEnvConfig } from '@next/env' @@ -178,11 +177,6 @@ export default class NextNodeServer extends BaseServer< * Using this from process.env allows targeting SSR by calling * `process.env.__NEXT_OPTIMIZE_CSS`. */ - if (this.renderOpts.optimizeFonts) { - process.env.__NEXT_OPTIMIZE_FONTS = JSON.stringify( - this.renderOpts.optimizeFonts - ) - } if (this.renderOpts.optimizeCss) { process.env.__NEXT_OPTIMIZE_CSS = JSON.stringify(true) } @@ -784,10 +778,6 @@ export default class NextNodeServer extends BaseServer< return null } - protected getFontManifest(): FontManifest { - return requireFontManifest(this.distDir) - } - protected getNextFontManifest(): NextFontManifest | undefined { return loadManifest( join(this.distDir, 'server', NEXT_FONT_MANIFEST + '.json') diff --git a/packages/next/src/server/post-process.ts b/packages/next/src/server/post-process.ts index d156f43757075..b7b17b79649d7 100644 --- a/packages/next/src/server/post-process.ts +++ b/packages/next/src/server/post-process.ts @@ -1,184 +1,11 @@ import type { RenderOpts } from './render' -import type { HTMLElement } from 'next/dist/compiled/node-html-parser' -import { OPTIMIZED_FONT_PROVIDERS } from '../shared/lib/constants' import { nonNullable } from '../lib/non-nullable' -type postProcessOptions = { - optimizeFonts: any -} - -type renderOptions = { - getFontDefinition?: (url: string) => string -} -interface PostProcessMiddleware { - inspect: (originalDom: HTMLElement, options: renderOptions) => any - mutate: (markup: string, data: any, options: renderOptions) => Promise -} - -type middlewareSignature = { - name: string - middleware: PostProcessMiddleware - condition: ((options: postProcessOptions) => boolean) | null -} - type PostProcessorFunction = | ((html: string) => Promise) | ((html: string) => string) -const middlewareRegistry: Array = [] - -function registerPostProcessor( - name: string, - middleware: PostProcessMiddleware, - condition?: (options: postProcessOptions) => boolean -) { - middlewareRegistry.push({ name, middleware, condition: condition || null }) -} - -async function processHTML( - html: string, - data: renderOptions, - options: postProcessOptions -): Promise { - // Don't parse unless there's at least one processor middleware - if (!middlewareRegistry[0]) { - return html - } - - const { parse } = - require('next/dist/compiled/node-html-parser') as typeof import('next/dist/compiled/node-html-parser') - const root: HTMLElement = parse(html) - let document = html - - // Calls the middleware, with some instrumentation and logging - async function callMiddleWare(middleware: PostProcessMiddleware) { - // let timer = Date.now() - const inspectData = middleware.inspect(root, data) - document = await middleware.mutate(document, inspectData, data) - // timer = Date.now() - timer - // if (timer > MIDDLEWARE_TIME_BUDGET) { - // TODO: Identify a correct upper limit for the postprocess step - // and add a warning to disable the optimization - // } - return - } - - for (let i = 0; i < middlewareRegistry.length; i++) { - let middleware = middlewareRegistry[i] - if (!middleware.condition || middleware.condition(options)) { - await callMiddleWare(middlewareRegistry[i].middleware) - } - } - - return document -} - -class FontOptimizerMiddleware implements PostProcessMiddleware { - inspect(originalDom: HTMLElement, options: renderOptions) { - if (!options.getFontDefinition) { - return - } - const fontDefinitions: (string | undefined)[][] = [] - // collecting all the requested font definitions - originalDom - .querySelectorAll('link') - .filter( - (tag: HTMLElement) => - tag.getAttribute('rel') === 'stylesheet' && - tag.hasAttribute('data-href') && - OPTIMIZED_FONT_PROVIDERS.some(({ url }) => { - const dataHref = tag.getAttribute('data-href') - return dataHref ? dataHref.startsWith(url) : false - }) - ) - .forEach((element: HTMLElement) => { - const url = element.getAttribute('data-href') - const nonce = element.getAttribute('nonce') - - if (url) { - fontDefinitions.push([url, nonce]) - } - }) - - return fontDefinitions - } - mutate = async ( - markup: string, - fontDefinitions: string[][], - options: renderOptions - ) => { - let result = markup - let preconnectUrls = new Set() - - if (!options.getFontDefinition) { - return markup - } - - fontDefinitions.forEach((fontDef) => { - const [url, nonce] = fontDef - const fallBackLinkTag = `` - if ( - result.indexOf(`` - ) - - // Remove inert font tag - const escapedUrl = url - .replace(/&/g, '&') - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - const fontRegex = new RegExp( - `]*data-href="${escapedUrl}"[^>]*/>` - ) - result = result.replace(fontRegex, '') - - const provider = OPTIMIZED_FONT_PROVIDERS.find((p) => - url.startsWith(p.url) - ) - - if (provider) { - preconnectUrls.add(provider.preconnect) - } - } - }) - - let preconnectTag = '' - preconnectUrls.forEach((url) => { - preconnectTag += `` - }) - - result = result.replace( - '', - preconnectTag - ) - - return result - } -} - async function postProcessHTML( pathname: string, content: string, @@ -187,8 +14,6 @@ async function postProcessHTML( | 'ampOptimizerConfig' | 'ampValidator' | 'ampSkipValidation' - | 'optimizeFonts' - | 'fontManifest' | 'optimizeCss' | 'distDir' | 'assetPrefix' @@ -207,30 +32,6 @@ async function postProcessHTML( return html } : null, - process.env.NEXT_RUNTIME !== 'edge' && renderOpts.optimizeFonts - ? async (html: string) => { - const getFontDefinition = (url: string) => { - if (!renderOpts.fontManifest) { - return '' - } - return ( - renderOpts.fontManifest.find((font) => { - if (font && font.url === url) { - return true - } - return false - })?.content || '' - ) - } - return await processHTML( - html, - { getFontDefinition }, - { - optimizeFonts: renderOpts.optimizeFonts, - } - ) - } - : null, process.env.NEXT_RUNTIME !== 'edge' && renderOpts.optimizeCss ? async (html: string) => { // eslint-disable-next-line import/no-extraneous-dependencies @@ -265,13 +66,4 @@ async function postProcessHTML( return content } -// Initialization -registerPostProcessor( - 'Inline-Fonts', - new FontOptimizerMiddleware(), - // Using process.env because passing Experimental flag through loader is not possible. - // @ts-ignore - (options) => options.optimizeFonts || process.env.__NEXT_OPTIMIZE_FONTS -) - export { postProcessHTML } diff --git a/packages/next/src/server/render.tsx b/packages/next/src/server/render.tsx index 139b51b4f4ad9..d78bb6adffcf5 100644 --- a/packages/next/src/server/render.tsx +++ b/packages/next/src/server/render.tsx @@ -21,7 +21,6 @@ import { setLazyProp, } from './api-utils' import { getCookieParser } from './api-utils/get-cookie-parser' -import type { FontManifest, FontConfig } from './font-utils' import type { LoadComponentsReturnType } from './load-components' import type { GetServerSideProps, @@ -252,8 +251,6 @@ export type RenderOptsPartial = { basePath: string unstable_runtimeJS?: false unstable_JsPreload?: false - optimizeFonts: FontConfig - fontManifest?: DeepReadonly optimizeCss: any nextConfigOutput?: 'standalone' | 'export' nextScriptWorkers: any @@ -1491,7 +1488,6 @@ export async function renderToHTMLImpl( styles: documentResult.styles, crossOrigin: renderOpts.crossOrigin, optimizeCss: renderOpts.optimizeCss, - optimizeFonts: renderOpts.optimizeFonts, nextConfigOutput: renderOpts.nextConfigOutput, nextScriptWorkers: renderOpts.nextScriptWorkers, runtime: globalRuntime, diff --git a/packages/next/src/server/require.ts b/packages/next/src/server/require.ts index edf9e9e865c25..d4a15e49a7303 100644 --- a/packages/next/src/server/require.ts +++ b/packages/next/src/server/require.ts @@ -1,6 +1,5 @@ import path from 'path' import { - AUTOMATIC_FONT_OPTIMIZATION_MANIFEST, PAGES_MANIFEST, SERVER_DIRECTORY, APP_PATHS_MANIFEST, @@ -13,7 +12,6 @@ import { PageNotFoundError, MissingStaticPage } from '../shared/lib/utils' import LRUCache from 'next/dist/compiled/lru-cache' import { loadManifest } from './load-manifest' import { promises } from 'fs' -import type { FontManifest } from './font-utils' const isDev = process.env.NODE_ENV === 'development' const pagePathCache = !isDev @@ -130,11 +128,3 @@ export async function requirePage( process.env.__NEXT_PRIVATE_RUNTIME_TYPE = '' } } - -export function requireFontManifest(distDir: string) { - const serverBuildPath = path.join(distDir, SERVER_DIRECTORY) - const fontManifest = loadManifest( - path.join(serverBuildPath, AUTOMATIC_FONT_OPTIMIZATION_MANIFEST) - ) as FontManifest - return fontManifest -} diff --git a/packages/next/src/shared/lib/constants.ts b/packages/next/src/shared/lib/constants.ts index 8763a89d38876..41251f0682616 100644 --- a/packages/next/src/shared/lib/constants.ts +++ b/packages/next/src/shared/lib/constants.ts @@ -48,7 +48,6 @@ export const TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.json' export const DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json' export const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json' -export const AUTOMATIC_FONT_OPTIMIZATION_MANIFEST = 'font-manifest.json' export const SERVER_DIRECTORY = 'server' export const CONFIG_FILES = [ 'next.config.js', @@ -96,11 +95,6 @@ export const DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime' export const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack' export const STATIC_PROPS_ID = '__N_SSG' export const SERVER_PROPS_ID = '__N_SSP' -export const GOOGLE_FONT_PROVIDER = 'https://fonts.googleapis.com/' -export const OPTIMIZED_FONT_PROVIDERS = [ - { url: GOOGLE_FONT_PROVIDER, preconnect: 'https://fonts.gstatic.com' }, - { url: 'https://use.typekit.net', preconnect: 'https://use.typekit.net' }, -] export const DEFAULT_SERIF_FONT = { name: 'Times New Roman', xAvgCharWidth: 821, diff --git a/packages/next/src/shared/lib/html-context.shared-runtime.ts b/packages/next/src/shared/lib/html-context.shared-runtime.ts index e2b96edb61ace..4aabe2fb5a603 100644 --- a/packages/next/src/shared/lib/html-context.shared-runtime.ts +++ b/packages/next/src/shared/lib/html-context.shared-runtime.ts @@ -1,7 +1,6 @@ import type { BuildManifest } from '../../server/get-page-files' import type { ServerRuntime } from '../../types' import type { NEXT_DATA } from './utils' -import type { FontConfig } from '../../server/font-utils' import type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin' import type { DeepReadonly } from './deep-readonly' @@ -40,7 +39,6 @@ export type HtmlProps = { head?: Array crossOrigin?: 'anonymous' | 'use-credentials' | '' | undefined optimizeCss?: any - optimizeFonts?: FontConfig nextConfigOutput?: 'standalone' | 'export' nextScriptWorkers?: boolean runtime?: ServerRuntime diff --git a/packages/next/src/telemetry/events/build.ts b/packages/next/src/telemetry/events/build.ts index faedb1d0f1692..bf95aaf3f1c82 100644 --- a/packages/next/src/telemetry/events/build.ts +++ b/packages/next/src/telemetry/events/build.ts @@ -155,7 +155,6 @@ export type EventBuildFeatureUsage = { | 'experimental/nextScriptWorkers' | 'experimental/optimizeCss' | 'experimental/ppr' - | 'optimizeFonts' | 'swcLoader' | 'swcRelay' | 'swcStyledComponents' diff --git a/test/integration/font-optimization/fixtures/font-override-size-adjust/next.config.js b/test/integration/font-optimization/fixtures/font-override-size-adjust/next.config.js deleted file mode 100644 index 70952fae76c1f..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override-size-adjust/next.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - cleanDistDir: false, - experimental: { - adjustFontFallbacks: true, - adjustFontFallbacksWithSizeAdjust: true, - }, -} diff --git a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_app.js b/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_app.js deleted file mode 100644 index 770c366c0c3a8..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_app.js +++ /dev/null @@ -1,6 +0,0 @@ -import '../styles/styles.css' - -// This default export is required in a new `pages/_app.js` file. -export default function MyApp({ Component, pageProps }) { - return -} diff --git a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_document.js b/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_document.js deleted file mode 100644 index 09f77550903af..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/_document.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from 'react' -import Document, { Main, NextScript, Head, Html } from 'next/document' -export default class MyDocument extends Document { - render() { - return ( - - - - - - -
- - - - ) - } -} diff --git a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/index.js b/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/index.js deleted file mode 100644 index 04f1aea06391a..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override-size-adjust/pages/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -const Page = () => { - return
Hello!
-} - -export default Page diff --git a/test/integration/font-optimization/fixtures/font-override-size-adjust/styles/styles.css b/test/integration/font-optimization/fixtures/font-override-size-adjust/styles/styles.css deleted file mode 100644 index 854f488005fab..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override-size-adjust/styles/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - font-family: Roboto, 'Roboto Fallback'; -} diff --git a/test/integration/font-optimization/fixtures/font-override/next.config.js b/test/integration/font-optimization/fixtures/font-override/next.config.js deleted file mode 100644 index 805d7488a83cb..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override/next.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - cleanDistDir: false, - experimental: { - adjustFontFallbacks: true, - }, -} diff --git a/test/integration/font-optimization/fixtures/font-override/pages/_app.js b/test/integration/font-optimization/fixtures/font-override/pages/_app.js deleted file mode 100644 index 770c366c0c3a8..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override/pages/_app.js +++ /dev/null @@ -1,6 +0,0 @@ -import '../styles/styles.css' - -// This default export is required in a new `pages/_app.js` file. -export default function MyApp({ Component, pageProps }) { - return -} diff --git a/test/integration/font-optimization/fixtures/font-override/pages/_document.js b/test/integration/font-optimization/fixtures/font-override/pages/_document.js deleted file mode 100644 index 09f77550903af..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override/pages/_document.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from 'react' -import Document, { Main, NextScript, Head, Html } from 'next/document' -export default class MyDocument extends Document { - render() { - return ( - - - - - - -
- - - - ) - } -} diff --git a/test/integration/font-optimization/fixtures/font-override/pages/index.js b/test/integration/font-optimization/fixtures/font-override/pages/index.js deleted file mode 100644 index 04f1aea06391a..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override/pages/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -const Page = () => { - return
Hello!
-} - -export default Page diff --git a/test/integration/font-optimization/fixtures/font-override/styles/styles.css b/test/integration/font-optimization/fixtures/font-override/styles/styles.css deleted file mode 100644 index 854f488005fab..0000000000000 --- a/test/integration/font-optimization/fixtures/font-override/styles/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - font-family: Roboto, 'Roboto Fallback'; -} diff --git a/test/integration/font-optimization/fixtures/invalid-assertprefix/next.config.js b/test/integration/font-optimization/fixtures/invalid-assertprefix/next.config.js deleted file mode 100644 index 0e35ec361f683..0000000000000 --- a/test/integration/font-optimization/fixtures/invalid-assertprefix/next.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - assetPrefix: '.', -} diff --git a/test/integration/font-optimization/fixtures/invalid-assertprefix/pages/index.js b/test/integration/font-optimization/fixtures/invalid-assertprefix/pages/index.js deleted file mode 100644 index 6c4bf4e7f3d8c..0000000000000 --- a/test/integration/font-optimization/fixtures/invalid-assertprefix/pages/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import { Inter } from 'next/font/google' - -const inter = Inter({ subsets: ['latin'] }) - -const Page = () => { - return
Hello
-} - -export default Page diff --git a/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/_document.js b/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/_document.js deleted file mode 100644 index 34851fcae15cb..0000000000000 --- a/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/_document.js +++ /dev/null @@ -1,36 +0,0 @@ -import Document, { Html, Head, Main, NextScript } from 'next/document' - -class MyDocument extends Document { - static async getInitialProps(ctx) { - const initialProps = await Document.getInitialProps(ctx) - return { ...initialProps } - } - - render() { - return ( - - - <> - {false && } - - - - - - -
- - - - ) - } -} - -export default MyDocument diff --git a/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/index.js b/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/index.js deleted file mode 100644 index 136175234f558..0000000000000 --- a/test/integration/font-optimization/fixtures/make-stylesheet-inert-regression/pages/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export default function Home() { - return ( -

- Falsey values contained in an element contained in Head should not result - in an error! -

- ) -} diff --git a/test/integration/font-optimization/fixtures/spread-operator-regression/pages/_document.js b/test/integration/font-optimization/fixtures/spread-operator-regression/pages/_document.js deleted file mode 100644 index a635c18efb021..0000000000000 --- a/test/integration/font-optimization/fixtures/spread-operator-regression/pages/_document.js +++ /dev/null @@ -1,24 +0,0 @@ -import Document, { Html, Head, Main, NextScript } from 'next/document' - -class MyDocument extends Document { - static async getInitialProps(ctx) { - const initialProps = await Document.getInitialProps(ctx) - return { ...initialProps } - } - - render() { - const things = { className: 'test' } - return ( - - - - -
- - - - ) - } -} - -export default MyDocument diff --git a/test/integration/font-optimization/fixtures/spread-operator-regression/pages/index.js b/test/integration/font-optimization/fixtures/spread-operator-regression/pages/index.js deleted file mode 100644 index 6ba1cb0bd3e6d..0000000000000 --- a/test/integration/font-optimization/fixtures/spread-operator-regression/pages/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function Home() { - return

Hello

-} diff --git a/test/integration/font-optimization/fixtures/with-google/manifest-snapshot.json b/test/integration/font-optimization/fixtures/with-google/manifest-snapshot.json deleted file mode 100644 index 26815ce12b078..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/manifest-snapshot.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "url": "https://fonts.googleapis.com/css2?family=Modak", - "content": "@font-face{font-family:'Modak';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/modak/v18/EJRYQgs1XtIEsnME.woff) format('woff')}@font-face{font-family:'Modak';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/modak/v18/EJRYQgs1XtIEskMB-hR77LKVTy8.woff2) format('woff2');unicode-range:U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB}@font-face{font-family:'Modak';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/modak/v18/EJRYQgs1XtIEskMO-hR77LKVTy8.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Modak';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/modak/v18/EJRYQgs1XtIEskMA-hR77LKV.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}" - }, - { - "url": "https://fonts.googleapis.com/css?family=Voces", - "content": "@font-face{font-family:'Voces';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/voces/v20/-F6_fjJyLyU8d7PGDmk.woff) format('woff')}@font-face{font-family:'Voces';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/voces/v20/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Voces';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/voces/v20/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}" - }, - { - "url": "https://fonts.googleapis.com/css2?family=Roboto:wght@700", - "content": "@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlvAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}" - }, - { - "url": "https://fonts.googleapis.com/css2?family=Roboto:wght@400;700;900&display=swap", - "content": "@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Me5g.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlvAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtvAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:900;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtfBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}" - } -] diff --git a/test/integration/font-optimization/fixtures/with-google/next.config.js b/test/integration/font-optimization/fixtures/with-google/next.config.js deleted file mode 100644 index 10d92b933824f..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - cleanDistDir: false, - experimental: { - amp: { - validator: require.resolve('../../../../lib/amp-validator-wasm.js'), - }, - }, -} diff --git a/test/integration/font-optimization/fixtures/with-google/pages/_document.js b/test/integration/font-optimization/fixtures/with-google/pages/_document.js deleted file mode 100644 index f8faa6f866a19..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/_document.js +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react' -import Document, { Main, NextScript, Head, Html } from 'next/document' -export default class MyDocument extends Document { - constructor(props) { - super(props) - const { __NEXT_DATA__, ids } = props - if (ids) { - __NEXT_DATA__.ids = ids - } - } - - render() { - return ( - - - - {false && } - - -
- - - - ) - } -} diff --git a/test/integration/font-optimization/fixtures/with-google/pages/amp.js b/test/integration/font-optimization/fixtures/with-google/pages/amp.js deleted file mode 100644 index 53ac86b915b16..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/amp.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' - -const Page = () => { - return
Hi!
-} - -export const config = { amp: true } - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-google/pages/index.js b/test/integration/font-optimization/fixtures/with-google/pages/index.js deleted file mode 100644 index 899838301059c..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import Link from 'next/link' - -const Page = () => { - return ( -
- Hi! -
-
- - With font - -
- ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-google/pages/nonce.js b/test/integration/font-optimization/fixtures/with-google/pages/nonce.js deleted file mode 100644 index 0dae87f35be2c..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/nonce.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import Head from 'next/head' - -const Page = () => { - return ( - <> - - - -
Hi!
- - ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-google/pages/stars.js b/test/integration/font-optimization/fixtures/with-google/pages/stars.js deleted file mode 100644 index d38e96c4ea4f7..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/stars.js +++ /dev/null @@ -1,26 +0,0 @@ -import Head from 'next/head' - -function Home({ stars }) { - return ( -
- - Create Next App - - - - -
-
Next stars: {stars}
-
-
- ) -} - -Home.getInitialProps = async () => { - return { stars: Math.random() * 1000 } -} - -export default Home diff --git a/test/integration/font-optimization/fixtures/with-google/pages/static-head.js b/test/integration/font-optimization/fixtures/with-google/pages/static-head.js deleted file mode 100644 index f56ef406776c3..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/static-head.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' -import Head from 'next/head' - -const Page = () => { - return ( - <> - - - -
Hi!
- - ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-google/pages/with-font.js b/test/integration/font-optimization/fixtures/with-google/pages/with-font.js deleted file mode 100644 index ef6b67a94fa12..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/with-font.js +++ /dev/null @@ -1,30 +0,0 @@ -import Head from 'next/head' -import Link from 'next/link' - -const WithFont = () => { - return ( - <> - - - - -
- Page with custom fonts -
-
- Without font -
- - ) -} - -export const getServerSideProps = async () => { - return { - props: {}, - } -} - -export default WithFont diff --git a/test/integration/font-optimization/fixtures/with-google/pages/without-font.js b/test/integration/font-optimization/fixtures/with-google/pages/without-font.js deleted file mode 100644 index 2185cb252e07e..0000000000000 --- a/test/integration/font-optimization/fixtures/with-google/pages/without-font.js +++ /dev/null @@ -1,26 +0,0 @@ -import Head from 'next/head' -import Link from 'next/link' - -const WithoutFont = () => { - return ( - <> - - - -
- Page without custom fonts -
-
- With font -
- - ) -} - -export const getServerSideProps = async () => { - return { - props: {}, - } -} - -export default WithoutFont diff --git a/test/integration/font-optimization/fixtures/with-typekit/manifest-snapshot.json b/test/integration/font-optimization/fixtures/with-typekit/manifest-snapshot.json deleted file mode 100644 index b7d9fb5eb6d5a..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/manifest-snapshot.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "url": "https://use.typekit.net/plm1izr.css", - "content": "@import url(\"https://p.typekit.net/p.css?s=1&k=plm1izr&ht=tk&f=32266&a=23152309&app=typekit&e=css\");@font-face{font-family:\"birra-2\";src:url(\"https://use.typekit.net/af/23e0ad/00000000000000003b9b410c/27/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/23e0ad/00000000000000003b9b410c/27/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/23e0ad/00000000000000003b9b410c/27/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"opentype\");font-display:auto;font-style:normal;font-weight:700;font-stretch:normal}.tk-birra-2{font-family:\"birra-2\",serif}" - }, - { - "url": "https://use.typekit.net/ucs7mcf.css", - "content": "@import url(\"https://p.typekit.net/p.css?s=1&k=ucs7mcf&ht=tk&f=43886&a=23152309&app=typekit&e=css\");@font-face{font-family:\"flegrei\";src:url(\"https://use.typekit.net/af/74a5d1/00000000000000003b9b3d6e/27/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/74a5d1/00000000000000003b9b3d6e/27/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/74a5d1/00000000000000003b9b3d6e/27/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");font-display:auto;font-style:normal;font-weight:400;font-stretch:normal}.tk-flegrei{font-family:\"flegrei\",sans-serif}" - }, - { - "url": "https://use.typekit.net/erd0sed.css", - "content": "@import url(\"https://p.typekit.net/p.css?s=1&k=erd0sed&ht=tk&f=43885&a=23152309&app=typekit&e=css\");@font-face{font-family:\"pantelleria\";src:url(\"https://use.typekit.net/af/1f141c/00000000000000003b9b3d6f/27/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/1f141c/00000000000000003b9b3d6f/27/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/1f141c/00000000000000003b9b3d6f/27/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");font-display:auto;font-style:normal;font-weight:400;font-stretch:normal}.tk-pantelleria{font-family:\"pantelleria\",sans-serif}" - } -] diff --git a/test/integration/font-optimization/fixtures/with-typekit/next.config.js b/test/integration/font-optimization/fixtures/with-typekit/next.config.js deleted file mode 100644 index 10d92b933824f..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - cleanDistDir: false, - experimental: { - amp: { - validator: require.resolve('../../../../lib/amp-validator-wasm.js'), - }, - }, -} diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/_document.js b/test/integration/font-optimization/fixtures/with-typekit/pages/_document.js deleted file mode 100644 index 1aa2f2c2f64cc..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/_document.js +++ /dev/null @@ -1,26 +0,0 @@ -import * as React from 'react' -import Document, { Main, NextScript, Head, Html } from 'next/document' - -export default class MyDocument extends Document { - constructor(props) { - super(props) - const { __NEXT_DATA__, ids } = props - if (ids) { - __NEXT_DATA__.ids = ids - } - } - - render() { - return ( - - - - - -
- - - - ) - } -} diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/amp.js b/test/integration/font-optimization/fixtures/with-typekit/pages/amp.js deleted file mode 100644 index 53ac86b915b16..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/amp.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' - -const Page = () => { - return
Hi!
-} - -export const config = { amp: true } - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/index.js b/test/integration/font-optimization/fixtures/with-typekit/pages/index.js deleted file mode 100644 index 899838301059c..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import Link from 'next/link' - -const Page = () => { - return ( -
- Hi! -
-
- - With font - -
- ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/nonce.js b/test/integration/font-optimization/fixtures/with-typekit/pages/nonce.js deleted file mode 100644 index 2c6b7e91af930..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/nonce.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import Head from 'next/head' - -const Page = () => { - return ( - <> - - - -
Hi!
- - ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/stars.js b/test/integration/font-optimization/fixtures/with-typekit/pages/stars.js deleted file mode 100644 index c8ebb251db270..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/stars.js +++ /dev/null @@ -1,26 +0,0 @@ -import Head from 'next/head' - -function Home({ stars }) { - return ( -
- - Create Next App - - - - -
-
Next stars: {stars}
-
-
- ) -} - -Home.getInitialProps = async () => { - return { stars: Math.random() * 1000 } -} - -export default Home diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/static-head.js b/test/integration/font-optimization/fixtures/with-typekit/pages/static-head.js deleted file mode 100644 index 9b0ba8af28a32..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/static-head.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import Head from 'next/head' - -const Page = () => { - return ( - <> - - - -
Hi!
- - ) -} - -export default Page diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/with-font.js b/test/integration/font-optimization/fixtures/with-typekit/pages/with-font.js deleted file mode 100644 index 06c062283639f..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/with-font.js +++ /dev/null @@ -1,27 +0,0 @@ -import Head from 'next/head' -import Link from 'next/link' - -const WithFont = () => { - return ( - <> - - - - -
- Page with custom fonts -
-
- Without font -
- - ) -} - -export const getServerSideProps = async () => { - return { - props: {}, - } -} - -export default WithFont diff --git a/test/integration/font-optimization/fixtures/with-typekit/pages/without-font.js b/test/integration/font-optimization/fixtures/with-typekit/pages/without-font.js deleted file mode 100644 index 2185cb252e07e..0000000000000 --- a/test/integration/font-optimization/fixtures/with-typekit/pages/without-font.js +++ /dev/null @@ -1,26 +0,0 @@ -import Head from 'next/head' -import Link from 'next/link' - -const WithoutFont = () => { - return ( - <> - - - -
- Page without custom fonts -
-
- With font -
- - ) -} - -export const getServerSideProps = async () => { - return { - props: {}, - } -} - -export default WithoutFont diff --git a/test/integration/font-optimization/test/index.test.js b/test/integration/font-optimization/test/index.test.js deleted file mode 100644 index a42e8ecf0f68f..0000000000000 --- a/test/integration/font-optimization/test/index.test.js +++ /dev/null @@ -1,362 +0,0 @@ -/* eslint-env jest */ - -import cheerio from 'cheerio' -import { join } from 'path' -import fs from 'fs-extra' -import { - killApp, - findPort, - nextStart, - nextBuild, - renderViaHTTP, - waitFor, -} from 'next-test-utils' -import webdriver from 'next-webdriver' - -const fixturesDir = join(__dirname, '..', 'fixtures') - -const fsExists = (file) => - fs - .access(file) - .then(() => true) - .catch(() => false) - -describe('Font Optimization', () => { - describe.each([ - [ - 'google', - [ - 'https://fonts.googleapis.com/css?family=Voces', - 'https://fonts.googleapis.com/css2?family=Modak', - 'https://fonts.googleapis.com/css2?family=Roboto:wght@700', - 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;700;900&display=swap', - ], - [ - /