diff --git a/examples/cms-strapi/components/alert.js b/examples/cms-strapi/components/alert.js index 051f3319649ed2e..d74bcf69bde4a8c 100644 --- a/examples/cms-strapi/components/alert.js +++ b/examples/cms-strapi/components/alert.js @@ -14,7 +14,7 @@ export default function Alert({ preview }) {
{preview ? ( <> - This is page is a preview.{' '} + This page is a preview.{' '} 0) } renderError = renderError || !!result.error - if (!!result.error) errorPaths.push(path) + if (!!result.error) { + const { page } = pathMap + errorPaths.push(page !== path ? `${page}: ${path}` : path) + } if (options.buildExport && configuration) { if (typeof result.fromBuildExportRevalidate !== 'undefined') { diff --git a/packages/next/server/web/spec-extension/response.ts b/packages/next/server/web/spec-extension/response.ts index 337c7499bcdd184..ff18456b3aa24b3 100644 --- a/packages/next/server/web/spec-extension/response.ts +++ b/packages/next/server/web/spec-extension/response.ts @@ -1,8 +1,8 @@ import type { I18NConfig } from '../../config-shared' -import type { CookieSerializeOptions } from 'next/dist/compiled/cookie' import { NextURL } from '../next-url' import { toNodeHeaders } from '../utils' import cookie from 'next/dist/compiled/cookie' +import { CookieSerializeOptions } from '../types' const INTERNALS = Symbol('internal response') const REDIRECTS = new Set([301, 302, 303, 307, 308]) diff --git a/packages/next/server/web/types.ts b/packages/next/server/web/types.ts index 0fec937caf855e1..5a6d48fde63b057 100644 --- a/packages/next/server/web/types.ts +++ b/packages/next/server/web/types.ts @@ -7,6 +7,17 @@ export interface NodeHeaders { [header: string]: string | string[] | undefined } +export interface CookieSerializeOptions { + domain?: string + encode?(val: string): string + expires?: Date + httpOnly?: boolean + maxAge?: number + path?: string + sameSite?: boolean | 'lax' | 'strict' | 'none' + secure?: boolean +} + export interface RequestData { geo?: { city?: string diff --git a/test/integration/auto-export-query-error/test/index.test.js b/test/integration/auto-export-query-error/test/index.test.js index d33210ca90587ff..d0589b58b22bf12 100644 --- a/test/integration/auto-export-query-error/test/index.test.js +++ b/test/integration/auto-export-query-error/test/index.test.js @@ -20,7 +20,6 @@ const runTests = () => { expect(stderr).not.toContain('/amp') expect(stderr).not.toContain('/ssr') expect(stderr).not.toContain('/ssg') - expect(stderr).not.toContain('/hello') }) } diff --git a/test/integration/handles-export-errors/pages/blog/[slug].js b/test/integration/handles-export-errors/pages/blog/[slug].js new file mode 100644 index 000000000000000..fe9b6bab7da8e91 --- /dev/null +++ b/test/integration/handles-export-errors/pages/blog/[slug].js @@ -0,0 +1,16 @@ +export default function Page() { + throw new Error('oops') +} + +export function getStaticProps() { + return { + props: {}, + } +} + +export function getStaticPaths() { + return { + paths: ['/blog/first', '/blog/second'], + fallback: false, + } +} diff --git a/test/integration/handles-export-errors/test/index.test.js b/test/integration/handles-export-errors/test/index.test.js index 1e07907e4a491f8..6ac3736e9b1f61c 100644 --- a/test/integration/handles-export-errors/test/index.test.js +++ b/test/integration/handles-export-errors/test/index.test.js @@ -19,5 +19,7 @@ describe('Handles Errors During Export', () => { expect(stderr).toContain('/page-2') expect(stderr).toContain('/page-3') expect(stderr).toContain('/page-13') + expect(stderr).toContain('/blog/[slug]: /blog/first') + expect(stderr).toContain('/blog/[slug]: /blog/second') }) }) diff --git a/test/integration/middleware-typescript/test/index.test.js b/test/integration/middleware-typescript/test/index.test.js deleted file mode 100644 index 245826c000d3ea7..000000000000000 --- a/test/integration/middleware-typescript/test/index.test.js +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-env jest */ - -import { join } from 'path' -import { nextBuild } from 'next-test-utils' - -const appDir = join(__dirname, '..') -describe('TypeScript Middleware', () => { - describe('next build', () => { - it('should not fail to build middleware', async () => { - const { stderr, code } = await nextBuild(appDir, [], { stderr: true }) - expect(stderr).not.toMatch(/Failed to compile/) - expect(stderr).not.toMatch(/is not assignable to type/) - expect(code).toBe(0) - }) - }) -}) diff --git a/test/integration/middleware-typescript/next.config.js b/test/production/middleware-typescript/app/next.config.js similarity index 100% rename from test/integration/middleware-typescript/next.config.js rename to test/production/middleware-typescript/app/next.config.js diff --git a/test/integration/middleware-typescript/pages/interface/[id]/index.tsx b/test/production/middleware-typescript/app/pages/interface/[id]/index.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/interface/[id]/index.tsx rename to test/production/middleware-typescript/app/pages/interface/[id]/index.tsx diff --git a/test/integration/middleware-typescript/pages/interface/_middleware.ts b/test/production/middleware-typescript/app/pages/interface/_middleware.ts similarity index 92% rename from test/integration/middleware-typescript/pages/interface/_middleware.ts rename to test/production/middleware-typescript/app/pages/interface/_middleware.ts index 8c8f527503c79a3..04685749e3bc87f 100644 --- a/test/integration/middleware-typescript/pages/interface/_middleware.ts +++ b/test/production/middleware-typescript/app/pages/interface/_middleware.ts @@ -5,7 +5,7 @@ export const middleware: NextMiddleware = function (request) { console.log(request.ua?.isBot) console.log(request.ua?.ua) - return new Response(null, { + return new Response('hello from middleware', { headers: { 'req-url-basepath': request.nextUrl.basePath, 'req-url-pathname': request.nextUrl.pathname, diff --git a/test/integration/middleware-typescript/pages/interface/static.tsx b/test/production/middleware-typescript/app/pages/interface/static.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/interface/static.tsx rename to test/production/middleware-typescript/app/pages/interface/static.tsx diff --git a/test/integration/middleware-typescript/pages/redirects/_middleware.ts b/test/production/middleware-typescript/app/pages/redirects/_middleware.ts similarity index 100% rename from test/integration/middleware-typescript/pages/redirects/_middleware.ts rename to test/production/middleware-typescript/app/pages/redirects/_middleware.ts diff --git a/test/integration/middleware-typescript/pages/redirects/index.tsx b/test/production/middleware-typescript/app/pages/redirects/index.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/redirects/index.tsx rename to test/production/middleware-typescript/app/pages/redirects/index.tsx diff --git a/test/integration/middleware-typescript/pages/redirects/new-home.tsx b/test/production/middleware-typescript/app/pages/redirects/new-home.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/redirects/new-home.tsx rename to test/production/middleware-typescript/app/pages/redirects/new-home.tsx diff --git a/test/integration/middleware-typescript/pages/redirects/old-home.tsx b/test/production/middleware-typescript/app/pages/redirects/old-home.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/redirects/old-home.tsx rename to test/production/middleware-typescript/app/pages/redirects/old-home.tsx diff --git a/test/integration/middleware-typescript/pages/responses/_middleware.ts b/test/production/middleware-typescript/app/pages/responses/_middleware.ts similarity index 100% rename from test/integration/middleware-typescript/pages/responses/_middleware.ts rename to test/production/middleware-typescript/app/pages/responses/_middleware.ts diff --git a/test/integration/middleware-typescript/pages/responses/index.tsx b/test/production/middleware-typescript/app/pages/responses/index.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/responses/index.tsx rename to test/production/middleware-typescript/app/pages/responses/index.tsx diff --git a/test/integration/middleware-typescript/pages/rewrites/_middleware.ts b/test/production/middleware-typescript/app/pages/rewrites/_middleware.ts similarity index 100% rename from test/integration/middleware-typescript/pages/rewrites/_middleware.ts rename to test/production/middleware-typescript/app/pages/rewrites/_middleware.ts diff --git a/test/integration/middleware-typescript/pages/rewrites/a.tsx b/test/production/middleware-typescript/app/pages/rewrites/a.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/rewrites/a.tsx rename to test/production/middleware-typescript/app/pages/rewrites/a.tsx diff --git a/test/integration/middleware-typescript/pages/rewrites/b.tsx b/test/production/middleware-typescript/app/pages/rewrites/b.tsx similarity index 100% rename from test/integration/middleware-typescript/pages/rewrites/b.tsx rename to test/production/middleware-typescript/app/pages/rewrites/b.tsx diff --git a/test/integration/middleware-typescript/tsconfig.json b/test/production/middleware-typescript/app/tsconfig.json similarity index 94% rename from test/integration/middleware-typescript/tsconfig.json rename to test/production/middleware-typescript/app/tsconfig.json index f19745af2af6ea0..e327470b1834147 100644 --- a/test/integration/middleware-typescript/tsconfig.json +++ b/test/production/middleware-typescript/app/tsconfig.json @@ -6,7 +6,7 @@ "target": "es5", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, - "skipLibCheck": true, + "skipLibCheck": false, "strict": true, "forceConsistentCasingInFileNames": true, "noEmit": true, diff --git a/test/production/middleware-typescript/test/index.test.ts b/test/production/middleware-typescript/test/index.test.ts new file mode 100644 index 000000000000000..6a1ca2c66492d4a --- /dev/null +++ b/test/production/middleware-typescript/test/index.test.ts @@ -0,0 +1,33 @@ +/* eslint-env jest */ + +import { join } from 'path' +import { createNext, FileRef } from 'e2e-utils' +import { NextInstance } from 'test/lib/next-modes/base' +import { renderViaHTTP } from 'next-test-utils' + +const appDir = join(__dirname, '../app') + +describe('should set-up next', () => { + let next: NextInstance + + beforeAll(async () => { + next = await createNext({ + files: { + pages: new FileRef(join(appDir, 'pages')), + 'tsconfig.json': new FileRef(join(appDir, 'tsconfig.json')), + 'next.config.js': new FileRef(join(appDir, 'next.config.js')), + }, + dependencies: { + typescript: 'latest', + '@types/react': 'latest', + '@types/react-dom': 'latest', + }, + }) + }) + afterAll(() => next.destroy()) + + it('should have built and started', async () => { + const html = await renderViaHTTP(next.url, '/interface/static') + expect(html).toContain('hello from middleware') + }) +})