export function new_writer()

in src/writer/new_writer.ts [18:60]


export function new_writer(location: string, logger?: Logger): WriterUnion {
    /**
     * Create a new Writer based on an output location.
     */

    let writer: WriterUnion;

    if (location == "none") {
        writer = logger == undefined ? new NoopWriter() : new NoopWriter(logger);
    } else if (location == "memory") {
        writer = logger == undefined ? new MemoryWriter() : new MemoryWriter(logger);
    } else if (location == "stderr") {
        writer = logger == undefined ? new StderrWriter() : new StderrWriter(logger);
    } else if (location == "stdout") {
        writer = logger == undefined ? new StdoutWriter() : new StdoutWriter(logger);
    } else if (location == "udp") {
        location = "udp://127.0.0.1:1234"
        const parsed: URL = new URL(location)
        if (logger == undefined) {
            writer = new UdpWriter(location, parsed.hostname, Number(parsed.port));
        } else {
            writer = new UdpWriter(location, parsed.hostname, Number(parsed.port), logger);
        }
    } else if (location == "unix") {
        location = "file:///run/spectatord/spectatord.unix";
        writer = logger == undefined ? new FileWriter(location) : new FileWriter(location, logger);
    } else if (location.startsWith("file://")) {
        writer = logger == undefined ? new FileWriter(location) : new FileWriter(location, logger);
    } else if (location.startsWith("udp://")) {
        const parsed: URL = new URL(location)
        // convert IPv6 loop-back address from [::1] to ::1, so it works with the socket api
        const hostname: string = parsed.hostname.replace("[::1]", "::1")
        if (logger == undefined) {
            writer = new UdpWriter(location, hostname, Number(parsed.port));
        } else {
            writer = new UdpWriter(location, hostname, Number(parsed.port), logger);
        }
    } else {
        throw new Error(`unsupported Writer location: ${location}`);
    }

    return writer;
}