diff --git a/src/index.ts b/src/index.ts index 525679bb..67604e15 100644 --- a/src/index.ts +++ b/src/index.ts @@ -98,8 +98,13 @@ export { Response, Headers, FormData, + getCookies, + setCookie, + getSetCookies, + deleteCookie, + parseCookie, } from 'undici'; -export type { RequestInfo, RequestInit, BodyInit, ResponseInit } from 'undici'; +export type { RequestInfo, RequestInit, BodyInit, ResponseInit, Cookie } from 'undici'; // HttpClient2 is keep compatible with urllib@2 HttpClient2 export { HttpClient, HttpClient as HttpClient2, HEADER_USER_AGENT as USER_AGENT } from './HttpClient.js'; export type { RequestDiagnosticsMessage, ResponseDiagnosticsMessage, ClientOptions } from './HttpClient.js'; diff --git a/test/index.test.ts b/test/index.test.ts index 3c392e67..8761a8d9 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -10,7 +10,14 @@ import urllib, { MockAgent, setGlobalDispatcher, getGlobalDispatcher, + getCookies, + setCookie, + getSetCookies, + deleteCookie, + parseCookie, + Headers, } from '../src/index.js'; +import type { Cookie } from '../src/index.js'; import { startServer } from './fixtures/server.js'; import { readableToBytes } from './utils.js'; @@ -423,4 +430,55 @@ describe('index.test.ts', () => { assert.equal(response.status, 200); }); }); + + describe('Cookie utilities', () => { + it('should export getCookies from undici', () => { + assert.equal(typeof getCookies, 'function'); + const headers = new Headers(); + headers.set('cookie', 'foo=bar; hello=world'); + const cookies = getCookies(headers); + assert.equal(cookies.foo, 'bar'); + assert.equal(cookies.hello, 'world'); + }); + + it('should export setCookie from undici', () => { + assert.equal(typeof setCookie, 'function'); + const headers = new Headers(); + const cookie: Cookie = { name: 'foo', value: 'bar' }; + setCookie(headers, cookie); + const setCookieHeader = headers.get('set-cookie'); + assert(setCookieHeader); + assert.match(setCookieHeader, /foo=bar/); + }); + + it('should export getSetCookies from undici', () => { + assert.equal(typeof getSetCookies, 'function'); + const headers = new Headers(); + headers.append('set-cookie', 'foo=bar'); + headers.append('set-cookie', 'hello=world'); + const cookies = getSetCookies(headers); + assert.equal(cookies.length, 2); + assert.equal(cookies[0].name, 'foo'); + assert.equal(cookies[0].value, 'bar'); + assert.equal(cookies[1].name, 'hello'); + assert.equal(cookies[1].value, 'world'); + }); + + it('should export deleteCookie from undici', () => { + assert.equal(typeof deleteCookie, 'function'); + const headers = new Headers(); + deleteCookie(headers, 'foo'); + const setCookieHeader = headers.get('set-cookie'); + assert(setCookieHeader); + assert.match(setCookieHeader, /foo=/); + }); + + it('should export parseCookie from undici', () => { + assert.equal(typeof parseCookie, 'function'); + const cookie = parseCookie('foo=bar'); + assert(cookie); + assert.equal(cookie.name, 'foo'); + assert.equal(cookie.value, 'bar'); + }); + }); });