@tanstack/ai
Version:
Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.
84 lines (83 loc) • 2.22 kB
JavaScript
const DIR_OPTIONS = { depth: null, colors: true };
function resolveMetaStrategy() {
try {
if (globalThis.navigator?.userAgent === "Cloudflare-Workers") return "json";
} catch {
}
if (typeof process !== "undefined" && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- a partial process global (bundler shims) may lack versions
typeof process.versions?.node === "string") {
return "dir";
}
return "arg";
}
function stringifyMetaSafely(value) {
const seen = /* @__PURE__ */ new WeakSet();
try {
return JSON.stringify(
value,
(_key, entry) => {
if (typeof entry === "bigint") return entry.toString();
if (entry instanceof Error) {
return {
name: entry.name,
message: entry.message,
stack: entry.stack
};
}
if (typeof entry === "object" && entry !== null) {
if (seen.has(entry)) return "[Circular]";
seen.add(entry);
}
return entry;
},
2
);
} catch {
try {
return String(value);
} catch {
return "[Unserializable meta]";
}
}
}
class ConsoleLogger {
/** Log a debug-level message; forwards to `console.debug`. */
debug(message, meta) {
this.emit("debug", message, meta);
}
/** Log an info-level message; forwards to `console.info`. */
info(message, meta) {
this.emit("info", message, meta);
}
/** Log a warning-level message; forwards to `console.warn`. */
warn(message, meta) {
this.emit("warn", message, meta);
}
/** Log an error-level message; forwards to `console.error`. */
error(message, meta) {
this.emit("error", message, meta);
}
emit(level, message, meta) {
if (meta === void 0) {
console[level](message);
return;
}
switch (resolveMetaStrategy()) {
case "dir":
console[level](message);
console.dir(meta, DIR_OPTIONS);
break;
case "json":
console[level](`${message}
${stringifyMetaSafely(meta)}`);
break;
case "arg":
console[level](message, meta);
break;
}
}
}
export {
ConsoleLogger
};
//# sourceMappingURL=console-logger.js.map