From 593b728029a8462f24f86ef7450984df9c81fa27 Mon Sep 17 00:00:00 2001 From: Oscar Dominguez Date: Wed, 25 Sep 2024 00:50:59 +0200 Subject: [PATCH] test(types): use --exactOptionalPropertyTypes and --strict options (#557) --- package-lock.json | 8 +++--- package.json | 4 +-- src/middleware/handle-request.ts | 29 ++++++++++++++++------ src/middleware/web-worker/send-response.ts | 11 +++++--- src/types.ts | 8 +++--- test/typescript-validate.ts | 2 +- 6 files changed, 40 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 26c7fe4a4..b22653ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "universal-user-agent": "^7.0.0" }, "devDependencies": { - "@octokit/tsconfig": "^3.0.0", + "@octokit/tsconfig": "^4.0.0", "@types/jest": "^29.0.0", "@types/node": "^20.0.0", "esbuild": "^0.24.0", @@ -1763,9 +1763,9 @@ } }, "node_modules/@octokit/tsconfig": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-3.1.0.tgz", - "integrity": "sha512-3jGTGqDnnh/MZlg/sf21J/0cghsmaSnG+ZPK+o++sQwUwgrLVtfbUi/BANHgf22SRnxhdYtOoRX90I9/cP+9BA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-4.0.0.tgz", + "integrity": "sha512-hRd6UhX19m+8WhfrEpNLtm9TjuizYSG/dE0a+ivU71ylSxABVe4mEK+JMAGdjj6/gIQ+5DPegTPofi4P8VC5IA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index b43564275..371453e69 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint:fix": "prettier --write '{src,test}/**/*' README.md package.json", "pretest": "npm run -s lint", "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest --coverage", - "test:typescript": "npx tsc --noEmit --declaration --noUnusedLocals --allowImportingTsExtensions --moduleResolution node16 --module node16 test/typescript-validate.ts" + "test:typescript": "npx tsc --noEmit --declaration --noUnusedLocals --allowImportingTsExtensions --moduleResolution node16 --module node16 --exactOptionalPropertyTypes --strict test/typescript-validate.ts" }, "repository": "github:octokit/oauth-app.js", "keywords": [ @@ -31,7 +31,7 @@ "universal-user-agent": "^7.0.0" }, "devDependencies": { - "@octokit/tsconfig": "^3.0.0", + "@octokit/tsconfig": "^4.0.0", "@types/jest": "^29.0.0", "@types/node": "^20.0.0", "esbuild": "^0.24.0", diff --git a/src/middleware/handle-request.ts b/src/middleware/handle-request.ts index 8fceaa35b..5b963a1ca 100644 --- a/src/middleware/handle-request.ts +++ b/src/middleware/handle-request.ts @@ -82,14 +82,27 @@ export async function handleRequest( try { if (route === routes.getLogin) { - const { url } = app.getWebFlowAuthorizationUrl({ - state: query.state, - scopes: query.scopes ? query.scopes.split(",") : undefined, - allowSignup: query.allowSignup - ? query.allowSignup === "true" - : undefined, - redirectUrl: query.redirectUrl, - }); + const authOptions = {}; + + if (query.state) { + Object.assign(authOptions, { state: query.state }); + } + + if (query.scopes) { + Object.assign(authOptions, { scopes: query.scopes.split(",") }); + } + + if (query.allowSignup) { + Object.assign(authOptions, { + allowSignup: query.allowSignup === "true", + }); + } + + if (query.redirectUrl) { + Object.assign(authOptions, { redirectUrl: query.redirectUrl }); + } + + const { url } = app.getWebFlowAuthorizationUrl(authOptions); return { status: 302, headers: { location: url } }; } diff --git a/src/middleware/web-worker/send-response.ts b/src/middleware/web-worker/send-response.ts index 3a9ea36a4..f84a4d0f8 100644 --- a/src/middleware/web-worker/send-response.ts +++ b/src/middleware/web-worker/send-response.ts @@ -1,8 +1,13 @@ import type { OctokitResponse } from "../types.js"; export function sendResponse(octokitResponse: OctokitResponse): Response { - return new Response(octokitResponse.text, { + const responseOptions = { status: octokitResponse.status, - headers: octokitResponse.headers, - }); + }; + + if (octokitResponse.headers) { + Object.assign(responseOptions, { headers: octokitResponse.headers }); + } + + return new Response(octokitResponse.text, responseOptions); } diff --git a/src/types.ts b/src/types.ts index 8fbfeb8e3..5738d9825 100644 --- a/src/types.ts +++ b/src/types.ts @@ -84,10 +84,10 @@ export type State = { clientId: ClientId; clientSecret: ClientSecret; defaultScopes: Scope[]; - allowSignup?: boolean; - baseUrl?: string; - redirectUrl?: string; - log?: typeof console; + allowSignup?: boolean | undefined; + baseUrl?: string | undefined; + redirectUrl?: string | undefined; + log?: typeof console | undefined; Octokit: OAuthAppOctokitClassType; octokit: OctokitInstance; eventHandlers: { diff --git a/test/typescript-validate.ts b/test/typescript-validate.ts index 9859a1d74..a9d4219e9 100644 --- a/test/typescript-validate.ts +++ b/test/typescript-validate.ts @@ -113,7 +113,7 @@ export async function GitHubAppTest() { // @ts-expect-error context.scopes; - if ("refreshToken" in context.authentication) { + if (context.authentication && "refreshToken" in context.authentication) { context.authentication.refreshTokenExpiresAt; } });