import { getCurrentInstance } from 'vue' import { serializeCookie, parseDocumentCookies } from './cookieUtils' import type { CookieOptions } from './cookieUtils' import { resolveSSRContext } from './ssrContext' export function useCookie(name: string, options: CookieOptions = {}) { const instance = getCurrentInstance() const getSSRContext = () => resolveSSRContext(instance) const getAll = (): Record => { const ssr = getSSRContext() if (ssr && ssr.cookies) return ssr.cookies as Record return parseDocumentCookies() } const get = (): string | undefined => { const all = getAll() return all[name] } const set = (value: string, opt: CookieOptions = {}) => { const o = { path: '/', ...options, ...opt } const str = serializeCookie(name, value, o) const ssr = getSSRContext() if (ssr) { ssr.cookies = ssr.cookies || {} ssr.cookies[name] = value ssr.setCookies = ssr.setCookies || [] ssr.setCookies.push(str) } else if (typeof document !== 'undefined') { document.cookie = str } } const remove = (opt: CookieOptions = {}) => { set('', { ...opt, maxAge: 0, expires: new Date(0) }) } return { get, set, remove } }