@sema-agent/core
Version:
Stateless, task-oriented AI agent core
91 lines (90 loc) • 2.27 kB
JavaScript
import { describeRejectedValue } from "./tool-search-setting.js";
export function isErrorLike(value) {
try {
if (value instanceof Error)
return true;
return Object.prototype.toString.call(value) === "[object Error]";
}
catch {
return false;
}
}
export function thrownIs(value, ctor) {
try {
return value instanceof ctor;
}
catch {
return false;
}
}
export function thrownName(err) {
const name = isErrorLike(err) ? readMember(err, "name") : undefined;
return typeof name === "string" ? name : undefined;
}
export function thrownText(err) {
try {
if (typeof err === "string")
return err;
if (isErrorLike(err)) {
const message = err.message;
if (typeof message === "string")
return message;
}
}
catch {
}
return describeRejectedValue(err);
}
export function thrownLabel(err) {
try {
if (isErrorLike(err)) {
const label = String(err);
if (label !== "")
return label;
}
}
catch {
}
return thrownText(err);
}
export function asThrownError(err) {
try {
if (err instanceof Error)
return err;
}
catch {
}
return new Error(thrownLabel(err));
}
export function readMember(value, key) {
try {
if (value === null || value === undefined)
return undefined;
return value[key];
}
catch {
return undefined;
}
}
export function readOwnMembers(value) {
let keys;
try {
if (value === null || typeof value !== "object" || Array.isArray(value))
return undefined;
keys = Object.keys(value);
}
catch {
return undefined;
}
const out = {};
for (const key of keys)
Object.defineProperty(out, key, { value: readMember(value, key), enumerable: true, writable: true, configurable: true });
return out;
}
export function thrownMarksOf(err) {
const details = readOwnMembers(readMember(err, "details"));
const errorKind = readMember(err, "errorKind");
if (typeof errorKind !== "string")
return details;
return { ...(details ?? {}), errorKind };
}