diff --git a/packages/kit/src/runtime/server/cookie.js b/packages/kit/src/runtime/server/cookie.js index f8d872207005..54119b411f0e 100644 --- a/packages/kit/src/runtime/server/cookie.js +++ b/packages/kit/src/runtime/server/cookie.js @@ -107,13 +107,23 @@ export function get_cookies(request, url, trailing_slash) { * @param {import('cookie').CookieSerializeOptions} opts */ set(name, value, opts = {}) { + return this.set_internal(name, value, { with_defaults: true, ...opts }); + }, + + /** + * @param {string} name + * @param {string} value + * @param {import('cookie').CookieSerializeOptions & { with_defaults?: boolean }} opts + */ + set_internal(name, value, opts = {}) { let path = opts.path ?? default_path; + const with_defaults = opts.with_defaults ?? true; new_cookies[name] = { name, value, options: { - ...defaults, + ...(with_defaults ? defaults : {}), ...opts, path } diff --git a/packages/kit/src/runtime/server/fetch.js b/packages/kit/src/runtime/server/fetch.js index ca5df895f9a8..90abe108a6f9 100644 --- a/packages/kit/src/runtime/server/fetch.js +++ b/packages/kit/src/runtime/server/fetch.js @@ -131,11 +131,10 @@ export function create_fetch({ event, options, manifest, state, get_cookie_heade const { name, value, ...options } = set_cookie_parser.parseString(str); // options.sameSite is string, something more specific is required - type cast is safe - event.cookies.set( - name, - value, - /** @type {import('cookie').CookieSerializeOptions} */ (options) - ); + event.cookies.set_internal(name, value, { + with_defaults: false, + .../** @type {import('cookie').CookieSerializeOptions} */ (options) + }); } }