From c559c75a3e0e57bf49f9119c9913f6eb4877ae6f Mon Sep 17 00:00:00 2001 From: Abdul Munim Date: Thu, 18 Aug 2022 16:29:18 +0500 Subject: [PATCH 1/2] OPTIONS http method Added Fixed #5193 Formatted using `pnpm format` --- packages/kit/src/runtime/server/page/index.js | 4 +++- .../src/routes/endpoint-output/options/+server.js | 6 ++++++ .../routes/shadowed/simple/options/+page.server.js | 2 ++ .../src/routes/shadowed/simple/options/+page.svelte | 0 packages/kit/test/apps/basics/test/server.test.js | 11 +++++++++++ packages/kit/types/internal.d.ts | 1 + 6 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js create mode 100644 packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.server.js create mode 100644 packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.svelte diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index edaa42016967..49ddf6d727e2 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -66,7 +66,9 @@ export async function render_page(event, route, options, state, resolve_opts) { // for non-GET requests, first call handler in +page.server.js // (this also determines status code) try { - const method = /** @type {'POST' | 'PATCH' | 'PUT' | 'DELETE'} */ (event.request.method); + const method = /** @type {'POST' | 'PATCH' | 'PUT' | 'DELETE' | 'OPTIONS'} */ ( + event.request.method + ); const handler = leaf_node.server[method]; if (handler) { const result = await handler.call(null, event); diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js new file mode 100644 index 000000000000..3147607d2897 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js @@ -0,0 +1,6 @@ +import { json } from '@sveltejs/kit'; + +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function OPTIONS() { + return json({}); +} diff --git a/packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.server.js b/packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.server.js new file mode 100644 index 000000000000..e788221971a2 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.server.js @@ -0,0 +1,2 @@ +/** @type {import('./$types').Action} */ +export function OPTIONS() {} diff --git a/packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.svelte b/packages/kit/test/apps/basics/src/routes/shadowed/simple/options/+page.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/apps/basics/test/server.test.js b/packages/kit/test/apps/basics/test/server.test.js index 45615bcb5630..1d9a11d2d426 100644 --- a/packages/kit/test/apps/basics/test/server.test.js +++ b/packages/kit/test/apps/basics/test/server.test.js @@ -49,6 +49,17 @@ test.describe('Endpoints', () => { expect(headers.head).toEqual(headers.get); }); + test('OPTIONS request', async ({ request }) => { + const url = '/endpoint-output/body'; + + var response = await request.fetch(url, { + method: 'OPTIONS' + }); + + expect(response.status()).toBe(200); + expect(response.text()).toBe('{}'); + }); + // TODO all the remaining tests in this section are really only testing // setResponse, since we're not otherwise changing anything on the response. // might be worth making these unit tests instead diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index 4f386bab0c22..a3c75bbc99fc 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -220,6 +220,7 @@ export interface SSRNode { PATCH?: Action; PUT?: Action; DELETE?: Action; + OPTIONS?: Action; }; } From d155d718276d046d94a59b061529b36cd681cb67 Mon Sep 17 00:00:00 2001 From: Abdul Munim Date: Thu, 18 Aug 2022 16:52:14 +0500 Subject: [PATCH 2/2] Updated url of test --- packages/kit/test/apps/basics/test/server.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/test/apps/basics/test/server.test.js b/packages/kit/test/apps/basics/test/server.test.js index 1d9a11d2d426..3d36dfdfd390 100644 --- a/packages/kit/test/apps/basics/test/server.test.js +++ b/packages/kit/test/apps/basics/test/server.test.js @@ -50,7 +50,7 @@ test.describe('Endpoints', () => { }); test('OPTIONS request', async ({ request }) => { - const url = '/endpoint-output/body'; + const url = '/endpoint-output/options'; var response = await request.fetch(url, { method: 'OPTIONS'