Get the total number of headers
namespace
__internal
namespace __internal
interface BunHeadersOverride
- name: 'set-cookie' | 'Set-Cookie'): string[];
Get all headers matching the name
Only supports
"Set-Cookie"
. All other headers are empty arrays.@param nameThe header name to get
@returnsAn array of header values
const headers = new Headers(); headers.append("Set-Cookie", "foo=bar"); headers.append("Set-Cookie", "baz=qux"); headers.getAll("Set-Cookie"); // ["foo=bar", "baz=qux"]
Convert Headers to a plain JavaScript object.
About 10x faster than
Object.fromEntries(headers.entries())
Called when you run
JSON.stringify(headers)
Does not preserve insertion order. Well-known header names are lowercased. Other header names are left as-is.
interface BunRequestOverride
interface BunResponseOverride
- type DistributedMerge<T, Else = T> = T extends T ? Merge<T, Exclude<Else, T>> : never
- type DistributedOmit<T, K extends PropertyKey> = T extends T ? Omit<T, K> : never
Like Omit, but correctly distributes over unions. Most useful for removing properties from union options objects, like Bun.SQL.Options
type X = Bun.DistributedOmit<{type?: 'a', url?: string} | {type?: 'b', flag?: boolean}, "url"> // `{type?: 'a'} | {type?: 'b', flag?: boolean}` (Omit applied to each union item instead of entire type) type X = Omit<{type?: 'a', url?: string} | {type?: 'b', flag?: boolean}, "url">; // `{type?: "a" | "b" | undefined}` (Missing `flag` property and no longer a union)
- type KeysInBoth<A, B> = Extract<keyof A, keyof B>
- type LibDomIsLoaded = typeof globalThis extends { onabort: any } ? true : false
- type LibEmptyOrBroadcastChannel = LibDomIsLoaded extends true ? {} : BroadcastChannel
- type LibEmptyOrBunWebSocket = LibDomIsLoaded extends true ? {} : Bun.WebSocket
- type LibEmptyOrEventSource = LibDomIsLoaded extends true ? {} : EventSource
- type LibEmptyOrNodeMessagePort = LibDomIsLoaded extends true ? {} : MessagePort
- type LibEmptyOrNodeReadableStream<T> = LibDomIsLoaded extends true ? {} : ReadableStream
- type LibEmptyOrNodeStreamWebTextDecoderStream = LibDomIsLoaded extends true ? {} : TextDecoderStream
- type LibEmptyOrNodeStreamWebTextEncoderStream = LibDomIsLoaded extends true ? {} : TextEncoderStream
- type LibEmptyOrNodeUtilTextDecoder = LibDomIsLoaded extends true ? {} : TextDecoder
- type LibEmptyOrNodeUtilTextEncoder = LibDomIsLoaded extends true ? {} : TextEncoder
- type LibEmptyOrNodeWritableStream<T> = LibDomIsLoaded extends true ? {} : WritableStream
- type LibEmptyOrPerformanceEntry = LibDomIsLoaded extends true ? {} : PerformanceEntry
- type LibEmptyOrPerformanceMark = LibDomIsLoaded extends true ? {} : PerformanceMark
- type LibEmptyOrPerformanceMeasure = LibDomIsLoaded extends true ? {} : PerformanceMeasure
- type LibEmptyOrPerformanceObserver = LibDomIsLoaded extends true ? {} : PerformanceObserver
- type LibEmptyOrPerformanceObserverEntryList = LibDomIsLoaded extends true ? {} : PerformanceObserverEntryList
- type LibEmptyOrPerformanceResourceTiming = LibDomIsLoaded extends true ? {} : PerformanceResourceTiming
- type LibEmptyOrReadableByteStreamController = LibDomIsLoaded extends true ? {} : ReadableByteStreamController
- type LibEmptyOrReadableStreamBYOBReader = LibDomIsLoaded extends true ? {} : ReadableStreamBYOBReader
- type LibEmptyOrReadableStreamBYOBRequest = LibDomIsLoaded extends true ? {} : ReadableStreamBYOBRequest
- type LibOrFallbackHeaders = LibDomIsLoaded extends true ? {} : Headers
- type LibOrFallbackRequest = LibDomIsLoaded extends true ? {} : Request
- type LibOrFallbackRequestInit = LibDomIsLoaded extends true ? {} : Omit<RequestInit, 'body' | 'headers'> & { body: Bun.BodyInit | null; headers: Bun.HeadersInit }
- type LibOrFallbackResponse = LibDomIsLoaded extends true ? {} : Response
- type LibOrFallbackResponseInit = LibDomIsLoaded extends true ? {} : ResponseInit
- type LibPerformanceOrNodePerfHooksPerformance = LibDomIsLoaded extends true ? {} : Performance
- type LibWorkerOrBunWorker = LibDomIsLoaded extends true ? {} : Bun.Worker
- type Merge<A, B> = MergeInner<A, B> & MergeInner<B, A>
- type MergeInner<A, B> = Omit<A, KeysInBoth<A, B>> & Omit<B, KeysInBoth<A, B>> & { [K in KeysInBoth<A, B>]: A[Key] | B[Key] }
- type UseLibDomIfAvailable<GlobalThisKeyName extends PropertyKey, Otherwise> = LibDomIsLoaded extends true ? typeof globalThis extends { [K in GlobalThisKeyName]: infer T } ? T : Otherwise : Otherwise
Helper type for avoiding conflicts in types.
Uses the lib.dom.d.ts definition if it exists, otherwise defines it locally.
This is to avoid type conflicts between lib.dom.d.ts and @types/bun.
Unfortunately some symbols cannot be defined when both Bun types and lib.dom.d.ts types are loaded, and since we can't redeclare the symbol in a way that satisfies both, we need to fallback to the type that lib.dom.d.ts provides.