From 4345f99c8a4ff39f90796e58597b41659d7674cf Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 26 May 2021 20:01:12 -0700 Subject: [PATCH 1/3] Rename handle's render parameter to respond --- .changeset/tender-buckets-turn.md | 5 +++++ documentation/docs/04-hooks.md | 10 +++++----- packages/create-svelte/templates/default/src/hooks.ts | 4 ++-- packages/kit/src/core/build/index.js | 2 +- packages/kit/src/core/dev/index.js | 2 +- packages/kit/src/runtime/server/index.js | 2 +- packages/kit/test/apps/basics/src/hooks.js | 4 ++-- packages/kit/types/hooks.d.ts | 2 +- 8 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 .changeset/tender-buckets-turn.md diff --git a/.changeset/tender-buckets-turn.md b/.changeset/tender-buckets-turn.md new file mode 100644 index 000000000000..1f8d015f20c3 --- /dev/null +++ b/.changeset/tender-buckets-turn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Rename handle's render parameter to respond diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index e8c9187ac482..e781861a23c5 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -8,9 +8,9 @@ An optional `src/hooks.js` (or `src/hooks.ts`, or `src/hooks/index.js`) file exp ### handle -This function runs on every request, and determines the response. It receives the `request` object and `render` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). +This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and `respond` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). -If unimplemented, defaults to `({ request, render }) => render(request)`. +If unimplemented, defaults to `({ request, respond }) => respond(request)`. To add custom data to the request, which is passed to endpoints, populate the `request.locals` object, as shown below. @@ -37,16 +37,16 @@ type Response = { type Handle> = (input: { request: Request; - render: (request: Request) => Response | Promise; + respond: (request: Request) => Response | Promise; }) => Response | Promise; ``` ```js /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, render }) { +export async function handle({ request, respond }) { request.locals.user = await getUserInformation(request.headers.cookie); - const response = await render(request); + const response = await respond(request); return { ...response, diff --git a/packages/create-svelte/templates/default/src/hooks.ts b/packages/create-svelte/templates/default/src/hooks.ts index 6fc783eb225d..b20ac6485f91 100644 --- a/packages/create-svelte/templates/default/src/hooks.ts +++ b/packages/create-svelte/templates/default/src/hooks.ts @@ -2,7 +2,7 @@ import cookie from 'cookie'; import { v4 as uuid } from '@lukeed/uuid'; import type { Handle } from '@sveltejs/kit'; -export const handle: Handle = async ({ request, render }) => { +export const handle: Handle = async ({ request, respond }) => { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.userid = cookies.userid || uuid(); @@ -11,7 +11,7 @@ export const handle: Handle = async ({ request, render }) => { request.method = request.query.get('_method').toUpperCase(); } - const response = await render(request); + const response = await respond(request); if (!cookies.userid) { // if this is the first time the user has visited this app, diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index 3137728009e7..dea69c6e36fb 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -363,7 +363,7 @@ async function build_server( // named imports without triggering Rollup's missing import detection const get_hooks = hooks => ({ getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, respond }) => respond(request)) }); const module_lookup = { diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 349673bfe358..78fcb73ef67b 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -187,7 +187,7 @@ class Watcher extends EventEmitter { }, hooks: { getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, render }) => render(request)) + handle: hooks.handle || (({ request, respond }) => respond(request)) }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 4acc8179dbbc..eda882407ce3 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -41,7 +41,7 @@ export async function respond(incoming, options, state = {}) { params: null, locals: {} }, - render: async (request) => { + respond: async (request) => { if (state.prerender && state.prerender.fallback) { return await render_response({ options, diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index ca5af57cf86f..1e5ac9c3dbbe 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -6,13 +6,13 @@ export function getSession(request) { } /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, render }) { +export async function handle({ request, respond }) { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.answer = 42; request.locals.name = cookies.name; - const response = await render(request); + const response = await respond(request); if (response) { return { diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index e2b91e6b7dbe..c93ebdd2b110 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -29,5 +29,5 @@ export type GetSession, Session = any> = { export type Handle> = (input: { request: ServerRequest; - render: (request: ServerRequest) => ServerResponse | Promise; + respond: (request: ServerRequest) => ServerResponse | Promise; }) => ServerResponse | Promise; From 90a25a72ebe9b8adce33d15bebdab2e7de232b64 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 29 May 2021 14:09:32 -0700 Subject: [PATCH 2/3] Rename to resolve --- .changeset/tender-buckets-turn.md | 2 +- documentation/docs/04-hooks.md | 10 +++++----- packages/create-svelte/templates/default/src/hooks.ts | 4 ++-- packages/kit/src/core/build/index.js | 2 +- packages/kit/src/core/dev/index.js | 2 +- packages/kit/src/runtime/server/index.js | 2 +- packages/kit/test/apps/basics/src/hooks.js | 4 ++-- packages/kit/types/hooks.d.ts | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.changeset/tender-buckets-turn.md b/.changeset/tender-buckets-turn.md index 1f8d015f20c3..6a97db02ecf9 100644 --- a/.changeset/tender-buckets-turn.md +++ b/.changeset/tender-buckets-turn.md @@ -2,4 +2,4 @@ '@sveltejs/kit': patch --- -Rename handle's render parameter to respond +Rename handle's render parameter to resolve diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index e781861a23c5..1dee0778acb9 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -8,9 +8,9 @@ An optional `src/hooks.js` (or `src/hooks.ts`, or `src/hooks/index.js`) file exp ### handle -This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and `respond` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). +This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and `resolve` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). -If unimplemented, defaults to `({ request, respond }) => respond(request)`. +If unimplemented, defaults to `({ request, resolve }) => resolve(request)`. To add custom data to the request, which is passed to endpoints, populate the `request.locals` object, as shown below. @@ -37,16 +37,16 @@ type Response = { type Handle> = (input: { request: Request; - respond: (request: Request) => Response | Promise; + resolve: (request: Request) => Response | Promise; }) => Response | Promise; ``` ```js /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, respond }) { +export async function handle({ request, resolve }) { request.locals.user = await getUserInformation(request.headers.cookie); - const response = await respond(request); + const response = await resolve(request); return { ...response, diff --git a/packages/create-svelte/templates/default/src/hooks.ts b/packages/create-svelte/templates/default/src/hooks.ts index b20ac6485f91..df8b96c7a6d4 100644 --- a/packages/create-svelte/templates/default/src/hooks.ts +++ b/packages/create-svelte/templates/default/src/hooks.ts @@ -2,7 +2,7 @@ import cookie from 'cookie'; import { v4 as uuid } from '@lukeed/uuid'; import type { Handle } from '@sveltejs/kit'; -export const handle: Handle = async ({ request, respond }) => { +export const handle: Handle = async ({ request, resolve }) => { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.userid = cookies.userid || uuid(); @@ -11,7 +11,7 @@ export const handle: Handle = async ({ request, respond }) => { request.method = request.query.get('_method').toUpperCase(); } - const response = await respond(request); + const response = await resolve(request); if (!cookies.userid) { // if this is the first time the user has visited this app, diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index dea69c6e36fb..d4495ba213ed 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -363,7 +363,7 @@ async function build_server( // named imports without triggering Rollup's missing import detection const get_hooks = hooks => ({ getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, respond }) => respond(request)) + handle: hooks.handle || (({ request, resolve }) => resolve(request)) }); const module_lookup = { diff --git a/packages/kit/src/core/dev/index.js b/packages/kit/src/core/dev/index.js index 78fcb73ef67b..12213f87873c 100644 --- a/packages/kit/src/core/dev/index.js +++ b/packages/kit/src/core/dev/index.js @@ -187,7 +187,7 @@ class Watcher extends EventEmitter { }, hooks: { getSession: hooks.getSession || (() => ({})), - handle: hooks.handle || (({ request, respond }) => respond(request)) + handle: hooks.handle || (({ request, resolve }) => resolve(request)) }, hydrate: this.config.kit.hydrate, paths: this.config.kit.paths, diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index eda882407ce3..b30642f757c7 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -41,7 +41,7 @@ export async function respond(incoming, options, state = {}) { params: null, locals: {} }, - respond: async (request) => { + resolve: async (request) => { if (state.prerender && state.prerender.fallback) { return await render_response({ options, diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index 1e5ac9c3dbbe..ecd194f0a4ad 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -6,13 +6,13 @@ export function getSession(request) { } /** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ request, respond }) { +export async function handle({ request, resolve }) { const cookies = cookie.parse(request.headers.cookie || ''); request.locals.answer = 42; request.locals.name = cookies.name; - const response = await respond(request); + const response = await resolve(request); if (response) { return { diff --git a/packages/kit/types/hooks.d.ts b/packages/kit/types/hooks.d.ts index c93ebdd2b110..412f0c6cc4c3 100644 --- a/packages/kit/types/hooks.d.ts +++ b/packages/kit/types/hooks.d.ts @@ -29,5 +29,5 @@ export type GetSession, Session = any> = { export type Handle> = (input: { request: ServerRequest; - respond: (request: ServerRequest) => ServerResponse | Promise; + resolve: (request: ServerRequest) => ServerResponse | Promise; }) => ServerResponse | Promise; From 37d846bb2a3774bc9aec75934bddbb442556bc58 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 29 May 2021 17:15:37 -0400 Subject: [PATCH 3/3] Update 04-hooks.md remove reference to 'renderer', which is confusing now that we no longer use `render` --- documentation/docs/04-hooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/04-hooks.md b/documentation/docs/04-hooks.md index 1dee0778acb9..397ad802c9ea 100644 --- a/documentation/docs/04-hooks.md +++ b/documentation/docs/04-hooks.md @@ -8,7 +8,7 @@ An optional `src/hooks.js` (or `src/hooks.ts`, or `src/hooks/index.js`) file exp ### handle -This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and `resolve` method, which calls SvelteKit's default renderer. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). +This function runs on every request, for both pages and endpoints, and determines the response. It receives the `request` object and a function called `resolve`, which invokes SvelteKit's router and generates a response accordingly. This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing endpoints programmatically, for example). If unimplemented, defaults to `({ request, resolve }) => resolve(request)`.