From 87b2f6ae4e23f45155191b1cc0857c378d86b4ee Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 23 Apr 2023 23:25:09 +0800 Subject: [PATCH 01/11] add fix and test --- packages/kit/src/constants.js | 4 +++ packages/kit/src/runtime/server/endpoint.js | 8 ++++-- packages/kit/src/runtime/server/utils.js | 5 ++-- .../endpoint-output/{options => }/+server.js | 5 ++++ .../endpoint-output/head-handler/+page.svelte | 0 .../endpoint-output/head-handler/+server.js | 8 ++++++ .../kit/test/apps/basics/test/server.test.js | 28 ++++++++++++++++++- 7 files changed, 52 insertions(+), 6 deletions(-) rename packages/kit/test/apps/basics/src/routes/endpoint-output/{options => }/+server.js (50%) create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+page.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js diff --git a/packages/kit/src/constants.js b/packages/kit/src/constants.js index 60c17e2beca2..7790ab1c66a6 100644 --- a/packages/kit/src/constants.js +++ b/packages/kit/src/constants.js @@ -5,3 +5,7 @@ export const SVELTE_KIT_ASSETS = '/_svelte_kit_assets'; export const GENERATED_COMMENT = '// this file is generated — do not edit it\n'; + +export const ENDPOINT_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD']; + +export const PAGE_METHODS = ['GET', 'POST', 'HEAD']; diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 3bb5f15a2863..ace20a39da01 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -1,3 +1,4 @@ +import { ENDPOINT_METHODS, PAGE_METHODS } from '../../constants.js'; import { negotiate } from '../../utils/http.js'; import { Redirect } from '../control.js'; import { method_not_allowed } from './utils.js'; @@ -79,14 +80,17 @@ export async function render_endpoint(event, mod, state) { export function is_endpoint_request(event) { const { method, headers } = event.request; - if (method === 'PUT' || method === 'PATCH' || method === 'DELETE' || method === 'OPTIONS') { - // These methods exist exclusively for endpoints + // These methods exist exclusively for endpoints + console.log(method, ENDPOINT_METHODS.includes(method), !PAGE_METHODS.includes(method)) + if (ENDPOINT_METHODS.includes(method) && !PAGE_METHODS.includes(method)) { return true; } // use:enhance uses a custom header to disambiguate if (method === 'POST' && headers.get('x-sveltekit-action') === 'true') return false; + console.log(event.request.headers.get('accept')); + // GET/POST requests may be for endpoints or pages. We prefer endpoints if this isn't a text/html request const accept = event.request.headers.get('accept') ?? '*/*'; return negotiate(accept, ['*', 'text/html']) !== 'text/html'; diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index 25b22720fb4e..c71f3640cc6b 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -4,6 +4,7 @@ import { coalesce_to_error } from '../../utils/error.js'; import { negotiate } from '../../utils/http.js'; import { HttpError } from '../control.js'; import { fix_stack_trace } from '../shared-server.js'; +import { ENDPOINT_METHODS } from '../../constants.js'; /** @param {any} body */ export function is_pojo(body) { @@ -34,9 +35,7 @@ export function method_not_allowed(mod, method) { /** @param {Partial>} mod */ export function allowed_methods(mod) { - const allowed = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'].filter( - (method) => method in mod - ); + const allowed = ENDPOINT_METHODS.filter((method) => method in mod); if ('GET' in mod || 'HEAD' in mod) allowed.push('HEAD'); 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/+server.js similarity index 50% rename from packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js rename to packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js index 321b34ae71b9..7ec2165c174b 100644 --- a/packages/kit/test/apps/basics/src/routes/endpoint-output/options/+server.js +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js @@ -2,3 +2,8 @@ export function OPTIONS() { return new Response('ok'); } + +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function CUSTOM() { + return new Response('ok'); +} diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+page.svelte b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+page.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js new file mode 100644 index 000000000000..f7db86cc44fc --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js @@ -0,0 +1,8 @@ +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function HEAD() { + return new Response('', { + headers: { + 'x-sveltekit-head-endpoint': 'true' + } + }); +} \ No newline at end of file diff --git a/packages/kit/test/apps/basics/test/server.test.js b/packages/kit/test/apps/basics/test/server.test.js index 05424811609b..921fd95c2084 100644 --- a/packages/kit/test/apps/basics/test/server.test.js +++ b/packages/kit/test/apps/basics/test/server.test.js @@ -190,7 +190,7 @@ test.describe('Endpoints', () => { }); test('OPTIONS handler', async ({ request }) => { - const url = '/endpoint-output/options'; + const url = '/endpoint-output'; const response = await request.fetch(url, { method: 'OPTIONS' @@ -199,6 +199,32 @@ test.describe('Endpoints', () => { expect(response.status()).toBe(200); expect(await response.text()).toBe('ok'); }); + + test('HEAD handler', async ({ request }) => { + const url = '/endpoint-output/head-handler'; + + const page_response = await request.fetch(url, { + method: 'HEAD', + headers: { + accept: 'text/html' + } + }); + + expect(page_response.status()).toBe(200); + expect(await page_response.text()).toBe(''); + expect(page_response.headers()['x-sveltekit-page']).toBe('true'); + + const endpoint_response = await request.fetch(url, { + method: 'HEAD', + headers: { + accept: 'application/json' + } + }); + + expect(endpoint_response.status()).toBe(200); + expect(await endpoint_response.text()).toBe(''); + expect(endpoint_response.headers()['x-sveltekit-head-endpoint']).toBe('true'); + }); }); test.describe('Errors', () => { From 0b0c85bbf9a7bd630276c945021901d41a06f6d0 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 23 Apr 2023 23:35:47 +0800 Subject: [PATCH 02/11] remove console log --- packages/kit/src/runtime/server/endpoint.js | 1 - .../apps/basics/src/routes/endpoint-output/+server.js | 5 ----- .../src/routes/endpoint-output/head-handler/+server.js | 10 +++++----- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index ace20a39da01..33b133447248 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -81,7 +81,6 @@ export function is_endpoint_request(event) { const { method, headers } = event.request; // These methods exist exclusively for endpoints - console.log(method, ENDPOINT_METHODS.includes(method), !PAGE_METHODS.includes(method)) if (ENDPOINT_METHODS.includes(method) && !PAGE_METHODS.includes(method)) { return true; } diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js index 7ec2165c174b..321b34ae71b9 100644 --- a/packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/+server.js @@ -2,8 +2,3 @@ export function OPTIONS() { return new Response('ok'); } - -/** @type {import('@sveltejs/kit').RequestHandler} */ -export function CUSTOM() { - return new Response('ok'); -} diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js index f7db86cc44fc..f3166fe93cd8 100644 --- a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js @@ -1,8 +1,8 @@ /** @type {import('@sveltejs/kit').RequestHandler} */ export function HEAD() { return new Response('', { - headers: { - 'x-sveltekit-head-endpoint': 'true' - } - }); -} \ No newline at end of file + headers: { + 'x-sveltekit-head-endpoint': 'true' + } + }); +} From a16f220d48918b06dd66757c2ec188647d4395b5 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 23 Apr 2023 23:38:29 +0800 Subject: [PATCH 03/11] changeset --- .changeset/famous-stingrays-change.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/famous-stingrays-change.md diff --git a/.changeset/famous-stingrays-change.md b/.changeset/famous-stingrays-change.md new file mode 100644 index 000000000000..39b7ad106ab3 --- /dev/null +++ b/.changeset/famous-stingrays-change.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: add `HEAD` server method From 194b39a0ae5fe839be1ebf0a3f6c460e113b6be4 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 23 Apr 2023 23:44:04 +0800 Subject: [PATCH 04/11] add docs --- documentation/docs/20-core-concepts/10-routing.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/docs/20-core-concepts/10-routing.md b/documentation/docs/20-core-concepts/10-routing.md index 4f10d26c36f0..2142e21cd73e 100644 --- a/documentation/docs/20-core-concepts/10-routing.md +++ b/documentation/docs/20-core-concepts/10-routing.md @@ -248,7 +248,7 @@ Like `+layout.js`, `+layout.server.js` can export [page options](page-options) ## +server -As well as pages, you can define routes with a `+server.js` file (sometimes referred to as an 'API route' or an 'endpoint'), which gives you full control over the response. Your `+server.js` file exports functions corresponding to HTTP verbs like `GET`, `POST`, `PATCH`, `PUT`, `DELETE`, and `OPTIONS` that take a `RequestEvent` argument and return a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object. +As well as pages, you can define routes with a `+server.js` file (sometimes referred to as an 'API route' or an 'endpoint'), which gives you full control over the response. Your `+server.js` file exports functions corresponding to HTTP verbs like `GET`, `POST`, `PATCH`, `PUT`, `DELETE`, `OPTIONS`, and `HEAD` that take a `RequestEvent` argument and return a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object. For example we could create an `/api/random-number` route with a `GET` handler: @@ -283,7 +283,7 @@ If an error is thrown (either `throw error(...)` or an unexpected error), the re ### Receiving data -By exporting `POST`/`PUT`/`PATCH`/`DELETE`/`OPTIONS` handlers, `+server.js` files can be used to create a complete API: +By exporting `POST`/`PUT`/`PATCH`/`DELETE`/`OPTIONS`/`HEAD` handlers, `+server.js` files can be used to create a complete API: ```svelte /// file: src/routes/add/+page.svelte @@ -330,7 +330,7 @@ export async function POST({ request }) { `+server.js` files can be placed in the same directory as `+page` files, allowing the same route to be either a page or an API endpoint. To determine which, SvelteKit applies the following rules: - `PUT`/`PATCH`/`DELETE`/`OPTIONS` requests are always handled by `+server.js` since they do not apply to pages -- `GET`/`POST` requests are treated as page requests if the `accept` header prioritises `text/html` (in other words, it's a browser page request), else they are handled by `+server.js` +- `GET`/`POST`/`HEAD` requests are treated as page requests if the `accept` header prioritises `text/html` (in other words, it's a browser page request), else they are handled by `+server.js` ## $types From a2924a6707e188489e537d770828c5729f0c7c31 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 23 Apr 2023 23:46:15 +0800 Subject: [PATCH 05/11] remove console log --- packages/kit/src/runtime/server/endpoint.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 33b133447248..fc9601132d37 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -88,8 +88,6 @@ export function is_endpoint_request(event) { // use:enhance uses a custom header to disambiguate if (method === 'POST' && headers.get('x-sveltekit-action') === 'true') return false; - console.log(event.request.headers.get('accept')); - // GET/POST requests may be for endpoints or pages. We prefer endpoints if this isn't a text/html request const accept = event.request.headers.get('accept') ?? '*/*'; return negotiate(accept, ['*', 'text/html']) !== 'text/html'; From c0cd98c336e2695137b12feb9134c1bb596f4554 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:05:21 +0800 Subject: [PATCH 06/11] rebase --- packages/kit/src/core/postbuild/analyse.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 64a93478af0e..9fac3160d4dd 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -13,6 +13,7 @@ import { forked } from '../../utils/fork.js'; import { should_polyfill } from '../../utils/platform.js'; import { installPolyfills } from '../../exports/node/polyfills.js'; import { resolvePath } from '../../exports/index.js'; +import { ENDPOINT_METHODS } from '../../constants.js'; export default forked(import.meta.url, analyse); @@ -92,12 +93,11 @@ async function analyse({ manifest_path, env }) { prerender = mod.prerender; } - if (mod.GET) api_methods.push('GET'); - if (mod.POST) api_methods.push('POST'); - if (mod.PUT) api_methods.push('PUT'); - if (mod.PATCH) api_methods.push('PATCH'); - if (mod.DELETE) api_methods.push('DELETE'); - if (mod.OPTIONS) api_methods.push('OPTIONS'); + Object.values(mod).forEach((/** @type {import('types').HttpMethod} */ method) => { + if (mod[method] && ENDPOINT_METHODS.includes(method)) { + api_methods.push(method); + } + }); config = mod.config; entries = mod.entries; From 6eb6f0983a89574ee49da626e9fe1dd25c44e9b0 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:15:37 +0800 Subject: [PATCH 07/11] reuse endpoint methods constant --- packages/kit/src/constants.js | 4 ++-- packages/kit/src/core/postbuild/analyse.js | 2 +- packages/kit/src/exports/vite/build/utils.js | 5 ++--- packages/kit/src/runtime/server/endpoint.js | 2 +- packages/kit/src/runtime/server/utils.js | 2 +- packages/kit/src/utils/exports.js | 1 + packages/kit/src/utils/exports.spec.js | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/kit/src/constants.js b/packages/kit/src/constants.js index 7790ab1c66a6..3a18121a4500 100644 --- a/packages/kit/src/constants.js +++ b/packages/kit/src/constants.js @@ -6,6 +6,6 @@ export const SVELTE_KIT_ASSETS = '/_svelte_kit_assets'; export const GENERATED_COMMENT = '// this file is generated — do not edit it\n'; -export const ENDPOINT_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD']; +export const ENDPOINT_METHODS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD']); -export const PAGE_METHODS = ['GET', 'POST', 'HEAD']; +export const PAGE_METHODS = new Set(['GET', 'POST', 'HEAD']); diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 9fac3160d4dd..1a8e66964cd3 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -94,7 +94,7 @@ async function analyse({ manifest_path, env }) { } Object.values(mod).forEach((/** @type {import('types').HttpMethod} */ method) => { - if (mod[method] && ENDPOINT_METHODS.includes(method)) { + if (mod[method] && ENDPOINT_METHODS.has(method)) { api_methods.push(method); } }); diff --git a/packages/kit/src/exports/vite/build/utils.js b/packages/kit/src/exports/vite/build/utils.js index 82b69e5998cd..ae17d1e39aeb 100644 --- a/packages/kit/src/exports/vite/build/utils.js +++ b/packages/kit/src/exports/vite/build/utils.js @@ -1,6 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { normalizePath } from 'vite'; +import { ENDPOINT_METHODS } from '../../../constants'; /** * Adds transitive JS and CSS dependencies to the js and css inputs. @@ -91,13 +92,11 @@ export function assets_base(config) { return (config.paths.assets || config.paths.base || '.') + '/'; } -const method_names = new Set(['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'OPTIONS']); - // If we'd written this in TypeScript, it could be easy... /** * @param {string} str * @returns {str is import('types').HttpMethod} */ export function is_http_method(str) { - return method_names.has(str); + return ENDPOINT_METHODS.has(str); } diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index fc9601132d37..86763581c435 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -81,7 +81,7 @@ export function is_endpoint_request(event) { const { method, headers } = event.request; // These methods exist exclusively for endpoints - if (ENDPOINT_METHODS.includes(method) && !PAGE_METHODS.includes(method)) { + if (ENDPOINT_METHODS.has(method) && !PAGE_METHODS.has(method)) { return true; } diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index c71f3640cc6b..ec5831b7e4de 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -35,7 +35,7 @@ export function method_not_allowed(mod, method) { /** @param {Partial>} mod */ export function allowed_methods(mod) { - const allowed = ENDPOINT_METHODS.filter((method) => method in mod); + const allowed = Array.from(ENDPOINT_METHODS).filter((method) => method in mod); if ('GET' in mod || 'HEAD' in mod) allowed.push('HEAD'); diff --git a/packages/kit/src/utils/exports.js b/packages/kit/src/utils/exports.js index 384573513091..57af3d6d8c7f 100644 --- a/packages/kit/src/utils/exports.js +++ b/packages/kit/src/utils/exports.js @@ -78,6 +78,7 @@ const valid_server_exports = new Set([ 'PUT', 'DELETE', 'OPTIONS', + 'HEAD', 'prerender', 'trailingSlash', 'config', diff --git a/packages/kit/src/utils/exports.spec.js b/packages/kit/src/utils/exports.spec.js index 3b6386344cd5..1395a6f89bbc 100644 --- a/packages/kit/src/utils/exports.spec.js +++ b/packages/kit/src/utils/exports.spec.js @@ -166,7 +166,7 @@ test('validates +server.js', () => { validate_server_exports({ answer: 42 }); - }, "Invalid export 'answer' (valid exports are GET, POST, PATCH, PUT, DELETE, OPTIONS, prerender, trailingSlash, config, entries, or anything with a '_' prefix)"); + }, "Invalid export 'answer' (valid exports are GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD, prerender, trailingSlash, config, entries, or anything with a '_' prefix)"); check_error(() => { validate_server_exports({ From 6069b7738e7eb7cfa7618dcc3ebdb8c442fd2059 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:18:57 +0800 Subject: [PATCH 08/11] prettier --- packages/kit/src/constants.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/constants.js b/packages/kit/src/constants.js index 3a18121a4500..4360335d4820 100644 --- a/packages/kit/src/constants.js +++ b/packages/kit/src/constants.js @@ -6,6 +6,14 @@ export const SVELTE_KIT_ASSETS = '/_svelte_kit_assets'; export const GENERATED_COMMENT = '// this file is generated — do not edit it\n'; -export const ENDPOINT_METHODS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD']); +export const ENDPOINT_METHODS = new Set([ + 'GET', + 'POST', + 'PUT', + 'PATCH', + 'DELETE', + 'OPTIONS', + 'HEAD' +]); export const PAGE_METHODS = new Set(['GET', 'POST', 'HEAD']); From 1ea05bbb744bdfc4ff5da467a38503cb4e46a8f4 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:22:13 +0800 Subject: [PATCH 09/11] Delete +server.js --- .../src/routes/endpoint-output/head-handler/+server.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js deleted file mode 100644 index f3166fe93cd8..000000000000 --- a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('@sveltejs/kit').RequestHandler} */ -export function HEAD() { - return new Response('', { - headers: { - 'x-sveltekit-head-endpoint': 'true' - } - }); -} From 90de50c0af50788827f274ce42f9b8f53ab84f64 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:22:53 +0800 Subject: [PATCH 10/11] Revert "Delete +server.js" This reverts commit a580ed45418450a38d6c93fcb6a9b40b1beda4df. --- .../src/routes/endpoint-output/head-handler/+server.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js diff --git a/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js new file mode 100644 index 000000000000..f3166fe93cd8 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/endpoint-output/head-handler/+server.js @@ -0,0 +1,8 @@ +/** @type {import('@sveltejs/kit').RequestHandler} */ +export function HEAD() { + return new Response('', { + headers: { + 'x-sveltekit-head-endpoint': 'true' + } + }); +} From da33e5216c85d3a3a3d8e69b8a87495bc371b402 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 24 Apr 2023 00:34:54 +0800 Subject: [PATCH 11/11] remove unused method --- packages/kit/src/exports/vite/build/utils.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/kit/src/exports/vite/build/utils.js b/packages/kit/src/exports/vite/build/utils.js index ae17d1e39aeb..7670a827d330 100644 --- a/packages/kit/src/exports/vite/build/utils.js +++ b/packages/kit/src/exports/vite/build/utils.js @@ -1,7 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; import { normalizePath } from 'vite'; -import { ENDPOINT_METHODS } from '../../../constants'; /** * Adds transitive JS and CSS dependencies to the js and css inputs. @@ -91,12 +90,3 @@ export function resolve_symlinks(manifest, file) { export function assets_base(config) { return (config.paths.assets || config.paths.base || '.') + '/'; } - -// If we'd written this in TypeScript, it could be easy... -/** - * @param {string} str - * @returns {str is import('types').HttpMethod} - */ -export function is_http_method(str) { - return ENDPOINT_METHODS.has(str); -}