EdgeAIG's picture
download
raw
2.14 kB
/**
* Wrap whatever the generated client decoded from a non-2xx error body
* into a real `Error` so downstream formatters (TUI, plugins) get a
* useful `.message` instead of `[object Object]` or blank. The original
* parsed body and status live under `.cause` for callers that need
* structured fields.
*
* Only fires when the caller used `{ throwOnError: true }`. Callers that
* read `result.error` directly (the result-tuple path) get the parsed
* body unchanged so existing field-level reads (`.error.name`,
* `JSON.stringify(error)`, etc.) are byte-for-byte identical to before.
*/
export function wrapClientError(error, response, request, opts) {
if (!opts?.throwOnError)
return error;
if (error instanceof Error)
return error;
// NamedError-shaped responses (the common case for opencode 4xx) come
// through as POJOs — extract a useful message first, then wrap.
if (typeof error === "object" && error !== null && Object.keys(error).length > 0) {
const obj = error;
const message = (typeof obj.data?.message === "string" && obj.data.message) ||
(typeof obj.message === "string" && obj.message) ||
(typeof obj.name === "string" && obj.name) ||
describe(request, response);
return new Error(message, { cause: { body: error, status: response?.status } });
}
if (typeof error === "string" && error.length > 0) {
return new Error(error, { cause: { body: error, status: response?.status } });
}
// Empty body / network failure / undefined / null / empty object.
const reason = response ? "(empty response body)" : "network error (no response)";
return new Error(`opencode server ${describe(request, response)}: ${reason}`, {
cause: { body: error, status: response?.status },
});
}
function describe(request, response) {
const method = request?.method ?? "?";
const url = request?.url ?? "?";
const status = response?.status;
const statusText = response?.statusText;
return `${method} ${url}${status ? " → " + status : ""}${statusText ? " " + statusText : ""}`;
}

Xet Storage Details

Size:
2.14 kB
·
Xet hash:
7633d69921e7e8f198a6b450922518f5662b43d35608bc4100437fe15be9b43e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.