From ab737769df8e60c12cdb1249ce42bd1080d0ab03 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:36:37 -0800 Subject: [PATCH 1/4] [chore] remove InternalHandle --- packages/kit/src/runtime/server/index.js | 6 +++++- packages/kit/types/hooks.d.ts | 9 --------- packages/kit/types/internal.d.ts | 4 ++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index f0511349b096..f208dc7f96f2 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -122,7 +122,9 @@ export async function respond(request, options, state = {}) { let decoded = decodeURI(event.url.pathname); if (options.paths.base) { - if (!decoded.startsWith(options.paths.base)) return; + if (!decoded.startsWith(options.paths.base)) { + return new Response(undefined, { status: 404 }); + } decoded = decoded.slice(options.paths.base.length) || '/'; } @@ -187,6 +189,8 @@ export async function respond(request, options, state = {}) { ssr }); } + + return new Response(undefined, { status: 404 }); }, // TODO remove for 1.0 diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index cb3e7d4e0558..0fe4373e561a 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -24,15 +24,6 @@ export interface Handle> { }): MaybePromise; } -// internally, `resolve` could return `undefined`, so we differentiate InternalHandle -// from the public Handle type -export interface InternalHandle> { - (input: { - event: RequestEvent; - resolve(event: RequestEvent, opts?: ResolveOpts): MaybePromise; - }): MaybePromise; -} - export interface HandleError> { (input: { error: Error & { frame?: string }; event: RequestEvent }): void; } diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index f3e6422e5604..2e517c21a36e 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -2,7 +2,7 @@ import { OutputAsset, OutputChunk } from 'rollup'; import { InternalApp, SSRManifest } from './app'; import { Fallthrough, RequestHandler } from './endpoint'; import { Either } from './helper'; -import { ExternalFetch, GetSession, HandleError, InternalHandle, RequestEvent } from './hooks'; +import { ExternalFetch, GetSession, Handle, HandleError, RequestEvent } from './hooks'; import { Load } from './page'; export interface PrerenderOptions { @@ -97,7 +97,7 @@ export type SSRNodeLoader = () => Promise; export interface Hooks { externalFetch: ExternalFetch; getSession: GetSession; - handle: InternalHandle; + handle: Handle; handleError: HandleError; } From 95e456d10c58e31b73511ad9a7d98dd9ab5c38fa Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:56:51 -0800 Subject: [PATCH 2/4] changeset --- .changeset/tender-buses-talk.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tender-buses-talk.md diff --git a/.changeset/tender-buses-talk.md b/.changeset/tender-buses-talk.md new file mode 100644 index 000000000000..561399989900 --- /dev/null +++ b/.changeset/tender-buses-talk.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[chore] remove InternalHandle From 6013524d4fc45bf7ffbeed23e92e5e4c64d029ea Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 26 Jan 2022 06:57:00 -0800 Subject: [PATCH 3/4] address code review comment --- packages/kit/src/runtime/server/index.js | 4 ++- .../kit/src/runtime/server/page/load_node.js | 26 +++---------------- packages/kit/types/internal.d.ts | 4 +-- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index f208dc7f96f2..e74dc732d8bf 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -190,7 +190,9 @@ export async function respond(request, options, state = {}) { }); } - return new Response(undefined, { status: 404 }); + // we can't load the endpoint from our own manifest, + // so we need to make an actual HTTP request + return await fetch(request); }, // TODO remove for 1.0 diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index c9e678780199..66d2f1440228 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -159,20 +159,11 @@ export async function load_node({ } ); - if (rendered) { - if (state.prerender) { - state.prerender.dependencies.set(relative, rendered); - } - - response = rendered; - } else { - // we can't load the endpoint from our own manifest, - // so we need to make an actual HTTP request - response = await fetch(new URL(requested, event.url).href, { - method: opts.method || 'GET', - headers: opts.headers - }); + if (state.prerender) { + state.prerender.dependencies.set(relative, rendered); } + + response = rendered; } else { // external if (resolved.startsWith('//')) { @@ -204,7 +195,6 @@ export async function load_node({ response = await options.hooks.externalFetch.call(null, external_request); } - if (response) { const proxy = new Proxy(response, { get(response, key, _receiver) { async function text() { @@ -249,14 +239,6 @@ export async function load_node({ }); return proxy; - } - - return ( - response || - new Response('Not found', { - status: 404 - }) - ); }, stuff: { ...stuff } }; diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index 2e517c21a36e..5c2d85e4a0ab 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -228,7 +228,5 @@ export interface MethodOverride { } export interface Respond { - (request: Request, options: SSRRenderOptions, state?: SSRRenderState): Promise< - Response | undefined - >; + (request: Request, options: SSRRenderOptions, state?: SSRRenderState): Promise; } From 7419aead861245045e424456466a92ee5b61f099 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 26 Jan 2022 07:05:18 -0800 Subject: [PATCH 4/4] format --- .../kit/src/runtime/server/page/load_node.js | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/kit/src/runtime/server/page/load_node.js b/packages/kit/src/runtime/server/page/load_node.js index 66d2f1440228..f270b12110d5 100644 --- a/packages/kit/src/runtime/server/page/load_node.js +++ b/packages/kit/src/runtime/server/page/load_node.js @@ -195,50 +195,50 @@ export async function load_node({ response = await options.hooks.externalFetch.call(null, external_request); } - const proxy = new Proxy(response, { - get(response, key, _receiver) { - async function text() { - const body = await response.text(); - - /** @type {import('types/helper').ResponseHeaders} */ - const headers = {}; - for (const [key, value] of response.headers) { - if (key === 'set-cookie') { - set_cookie_headers = set_cookie_headers.concat(value); - } else if (key !== 'etag') { - headers[key] = value; - } + const proxy = new Proxy(response, { + get(response, key, _receiver) { + async function text() { + const body = await response.text(); + + /** @type {import('types/helper').ResponseHeaders} */ + const headers = {}; + for (const [key, value] of response.headers) { + if (key === 'set-cookie') { + set_cookie_headers = set_cookie_headers.concat(value); + } else if (key !== 'etag') { + headers[key] = value; } + } - if (!opts.body || typeof opts.body === 'string') { - // prettier-ignore - fetched.push({ + if (!opts.body || typeof opts.body === 'string') { + // prettier-ignore + fetched.push({ url: requested, body: /** @type {string} */ (opts.body), json: `{"status":${response.status},"statusText":${s(response.statusText)},"headers":${s(headers)},"body":"${escape_json_string_in_html(body)}"}` }); - } - - return body; } - if (key === 'text') { - return text; - } - - if (key === 'json') { - return async () => { - return JSON.parse(await text()); - }; - } + return body; + } - // TODO arrayBuffer? + if (key === 'text') { + return text; + } - return Reflect.get(response, key, response); + if (key === 'json') { + return async () => { + return JSON.parse(await text()); + }; } - }); - return proxy; + // TODO arrayBuffer? + + return Reflect.get(response, key, response); + } + }); + + return proxy; }, stuff: { ...stuff } };