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')
+ })
+})