From f76840de70c5c53aed42ea92037a585531557b41 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 1 Dec 2021 20:40:39 -0600 Subject: [PATCH] Fix middleware types with skipLibCheck: false --- .../server/web/spec-extension/response.ts | 2 +- packages/next/server/web/types.ts | 11 +++++++ .../middleware-typescript/test/index.test.js | 16 --------- .../middleware-typescript/app}/next.config.js | 0 .../app}/pages/interface/[id]/index.tsx | 0 .../app}/pages/interface/_middleware.ts | 2 +- .../app}/pages/interface/static.tsx | 0 .../app}/pages/redirects/_middleware.ts | 0 .../app}/pages/redirects/index.tsx | 0 .../app}/pages/redirects/new-home.tsx | 0 .../app}/pages/redirects/old-home.tsx | 0 .../app}/pages/responses/_middleware.ts | 0 .../app}/pages/responses/index.tsx | 0 .../app}/pages/rewrites/_middleware.ts | 0 .../app}/pages/rewrites/a.tsx | 0 .../app}/pages/rewrites/b.tsx | 0 .../middleware-typescript/app}/tsconfig.json | 2 +- .../middleware-typescript/test/index.test.ts | 33 +++++++++++++++++++ 18 files changed, 47 insertions(+), 19 deletions(-) delete mode 100644 test/integration/middleware-typescript/test/index.test.js rename test/{integration/middleware-typescript => production/middleware-typescript/app}/next.config.js (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/interface/[id]/index.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/interface/_middleware.ts (92%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/interface/static.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/redirects/_middleware.ts (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/redirects/index.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/redirects/new-home.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/redirects/old-home.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/responses/_middleware.ts (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/responses/index.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/rewrites/_middleware.ts (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/rewrites/a.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/pages/rewrites/b.tsx (100%) rename test/{integration/middleware-typescript => production/middleware-typescript/app}/tsconfig.json (94%) create mode 100644 test/production/middleware-typescript/test/index.test.ts diff --git a/packages/next/server/web/spec-extension/response.ts b/packages/next/server/web/spec-extension/response.ts index 337c7499bcdd1..ff18456b3aa24 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 0fec937caf855..5a6d48fde63b0 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/middleware-typescript/test/index.test.js b/test/integration/middleware-typescript/test/index.test.js deleted file mode 100644 index 245826c000d3e..0000000000000 --- 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 8c8f527503c79..04685749e3bc8 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 f19745af2af6e..e327470b18341 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 0000000000000..6a1ca2c66492d --- /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') + }) +})