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;
}