@apollo/client
Version: 
A fully-featured caching GraphQL client.
73 lines (72 loc) • 2.45 kB
JavaScript
import { brand, isBranded } from "./utils.js";
/**
 * Represents a failure to parse the response as JSON from the server. This
 * error helps debug issues where the server returns malformed JSON or non-JSON
 * content.
 *
 * @remarks
 *
 * This error occurs when Apollo Client receives a response from the server but
 * cannot parse it as valid JSON. This typically happens when the server returns
 * HTML error pages, plain text responses, or malformed JSON instead of the
 * expected GraphQL JSON response format.
 *
 * @example
 *
 * ```ts
 * import { ServerParseError } from "@apollo/client/errors";
 *
 * // Check if an error is a ServerParseError instance
 * if (ServerParseError.is(error)) {
 *   console.log(`Failed to parse response from ${error.response.url}`);
 *   console.log(`Raw response: ${error.bodyText}`);
 *   console.log(`Status code: ${error.statusCode}`);
 *
 *   // Access the original parse error
 *   console.log(`Parse error: ${error.cause}`);
 * }
 * ```
 */
export class ServerParseError extends Error {
    /**
     * A method that determines whether an error is a `ServerParseError`
     * object. This method enables TypeScript to narrow the error type.
     *
     * @example
     *
     * ```ts
     * if (ServerParseError.is(error)) {
     *   // TypeScript now knows `error` is a ServerParseError object
     *   console.log(error.statusCode);
     * }
     * ```
     */
    static is(error) {
        return isBranded(error, "ServerParseError");
    }
    /**
    * The raw [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object provided by the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).
    */
    response;
    /**
    * The status code returned by the server in the response. This is provided
    * as a shortcut for `response.status`.
    */
    statusCode;
    /**
    * The raw response body text.
    */
    bodyText;
    constructor(originalParseError, options) {
        super(originalParseError instanceof Error ?
            originalParseError.message
            : "Could not parse server response", { cause: originalParseError });
        this.name = "ServerParseError";
        this.response = options.response;
        this.statusCode = options.response.status;
        this.bodyText = options.bodyText;
        brand(this);
        Object.setPrototypeOf(this, ServerParseError.prototype);
    }
}
//# sourceMappingURL=ServerParseError.js.map