Sources/Confidence/BufferedPassthroughSubject.swift (27 lines of code) (raw):

import Foundation import Combine class BufferedPassthrough<T> { private let subject = PassthroughSubject<T, Never>() private var buffer: [T] = [] private var isListening = false private let queue = DispatchQueue(label: "com.confidence.passthrough_serial") func send(_ value: T) { queue.sync { if isListening { subject.send(value) } else { buffer.append(value) } } } func publisher() -> AnyPublisher<T, Never> { return queue.sync { isListening = true let bufferedPublisher = buffer.publisher buffer.removeAll() return bufferedPublisher .append(subject) .eraseToAnyPublisher() } } }