From 0d1eac24e9898051c80704758c815ac1b0311393 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Tue, 4 Feb 2020 13:31:30 -0500 Subject: [PATCH] Detect Invalid Pages Before Optimize --- packages/next/build/index.ts | 15 +++++----- packages/next/telemetry/events/build.ts | 29 ++++++++++++++----- test/integration/telemetry/test/index.test.js | 9 ++++-- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 179ab522353869c..bf2053faeab2b8c 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -1,5 +1,6 @@ import chalk from 'chalk' import ciEnvironment from 'ci-info' +import escapeStringRegexp from 'escape-string-regexp' import findUp from 'find-up' import fs from 'fs' import Worker from 'jest-worker' @@ -11,14 +12,14 @@ import { promisify } from 'util' import formatWebpackMessages from '../client/dev/error-overlay/format-webpack-messages' import checkCustomRoutes, { getRedirectStatus, - RouteType, + Header, Redirect, Rewrite, - Header, + RouteType, } from '../lib/check-custom-routes' import { - PUBLIC_DIR_MIDDLEWARE_CONFLICT, PAGES_404_GET_INITIAL_PROPS_ERROR, + PUBLIC_DIR_MIDDLEWARE_CONFLICT, } from '../lib/constants' import { findPagesDir } from '../lib/find-pages-dir' import { recursiveDelete } from '../lib/recursive-delete' @@ -44,7 +45,7 @@ import loadConfig, { isTargetLikeServerless, } from '../next-server/server/config' import { - eventBuildDuration, + eventBuildCompleted, eventBuildOptimize, eventNextPlugins, eventVersion, @@ -56,17 +57,16 @@ import { generateBuildId } from './generate-build-id' import { isWriteable } from './is-writeable' import createSpinner from './spinner' import { - isPageStatic, collectPages, getPageSizeInKb, hasCustomAppGetInitialProps, + isPageStatic, PageInfo, printCustomRoutes, printTreeView, } from './utils' import getBaseWebpackConfig from './webpack-config' import { writeBuildId } from './write-build-id' -import escapeStringRegexp from 'escape-string-regexp' const fsAccess = promisify(fs.access) const fsUnlink = promisify(fs.unlink) @@ -394,8 +394,7 @@ export default async function build(dir: string, conf = null): Promise { } else { console.log(chalk.green('Compiled successfully.\n')) telemetry.record( - eventBuildDuration({ - totalPageCount: pagePaths.length, + eventBuildCompleted(pagePaths, { durationInSeconds: webpackBuildEnd[0], }) ) diff --git a/packages/next/telemetry/events/build.ts b/packages/next/telemetry/events/build.ts index f3ba100bb721d36..7ea9f882a2e960e 100644 --- a/packages/next/telemetry/events/build.ts +++ b/packages/next/telemetry/events/build.ts @@ -1,15 +1,34 @@ +const REGEXP_DIRECTORY_DUNDER = /[\\/]__[^\\/]+(? ): { eventName: string; payload: EventBuildCompleted } { return { eventName: EVENT_BUILD_DURATION, - payload: event, + payload: { + ...event, + totalPageCount: pagePaths.length, + hasDunderPages: pagePaths.some(path => + REGEXP_DIRECTORY_DUNDER.test(path) + ), + hasTestPages: pagePaths.some( + path => REGEXP_DIRECTORY_TESTS.test(path) || REGEXP_FILE_TEST.test(path) + ), + }, } } @@ -23,10 +42,6 @@ type EventBuildOptimized = { hasTestPages: boolean } -const REGEXP_DIRECTORY_DUNDER = /[\\/]__[^\\/]+(? { path.join(appDir, 'pages', 'hello.test.skip') ) - expect(stderr).toMatch(/hasDunderPages.*?true/) - expect(stderr).toMatch(/hasTestPages.*?true/) + const event1 = /NEXT_BUILD_COMPLETED[\s\S]+?{([\s\S]+?)}/.exec(stderr).pop() + expect(event1).toMatch(/hasDunderPages.*?true/) + expect(event1).toMatch(/hasTestPages.*?true/) + + const event2 = /NEXT_BUILD_OPTIMIZED[\s\S]+?{([\s\S]+?)}/.exec(stderr).pop() + expect(event2).toMatch(/hasDunderPages.*?true/) + expect(event2).toMatch(/hasTestPages.*?true/) }) it('detects isSrcDir dir correctly for `next dev`', async () => {