Skip to content

Commit

Permalink
feat(package): export a root error type (#241)
Browse files Browse the repository at this point in the history
  • Loading branch information
stainless-bot committed Sep 25, 2023
1 parent 1a30c77 commit c8b64f9
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
25 changes: 16 additions & 9 deletions src/core.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { VERSION } from './version';
import { APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError } from './error';
import {
ModernTreasuryError,
APIError,
APIConnectionError,
APIConnectionTimeoutError,
APIUserAbortError,
} from './error';
import {
kind as shimsKind,
type Readable,
Expand Down Expand Up @@ -433,7 +439,7 @@ export abstract class APIClient {
if (value === null) {
return `${encodeURIComponent(key)}=`;
}
throw new Error(
throw new ModernTreasuryError(
`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`,
);
})
Expand Down Expand Up @@ -592,7 +598,7 @@ export abstract class AbstractPage<Item> implements AsyncIterable<Item> {
async getNextPage(): Promise<this> {
const nextInfo = this.nextPageInfo();
if (!nextInfo) {
throw new Error(
throw new ModernTreasuryError(
'No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.',
);
}
Expand Down Expand Up @@ -918,10 +924,10 @@ export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve

const validatePositiveInteger = (name: string, n: unknown): number => {
if (typeof n !== 'number' || !Number.isInteger(n)) {
throw new Error(`${name} must be an integer`);
throw new ModernTreasuryError(`${name} must be an integer`);
}
if (n < 0) {
throw new Error(`${name} must be a positive integer`);
throw new ModernTreasuryError(`${name} must be a positive integer`);
}
return n;
};
Expand All @@ -932,7 +938,8 @@ export const castToError = (err: any): Error => {
};

export const ensurePresent = <T>(value: T | null | undefined): T => {
if (value == null) throw new Error(`Expected a value to be given but received ${value} instead.`);
if (value == null)
throw new ModernTreasuryError(`Expected a value to be given but received ${value} instead.`);
return value;
};

Expand All @@ -955,14 +962,14 @@ export const coerceInteger = (value: unknown): number => {
if (typeof value === 'number') return Math.round(value);
if (typeof value === 'string') return parseInt(value, 10);

throw new Error(`Could not coerce ${value} (type: ${typeof value}) into a number`);
throw new ModernTreasuryError(`Could not coerce ${value} (type: ${typeof value}) into a number`);
};

export const coerceFloat = (value: unknown): number => {
if (typeof value === 'number') return value;
if (typeof value === 'string') return parseFloat(value);

throw new Error(`Could not coerce ${value} (type: ${typeof value}) into a number`);
throw new ModernTreasuryError(`Could not coerce ${value} (type: ${typeof value}) into a number`);
};

export const coerceBoolean = (value: unknown): boolean => {
Expand Down Expand Up @@ -1066,5 +1073,5 @@ export const toBase64 = (str: string | null | undefined): string => {
return btoa(str);
}

throw new Error('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined');
throw new ModernTreasuryError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined');
};
4 changes: 3 additions & 1 deletion src/error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import { castToError, Headers } from './core';

export class APIError extends Error {
export class ModernTreasuryError extends Error {}

export class APIError extends ModernTreasuryError {
readonly status: number | undefined;
readonly headers: Headers | undefined;
readonly error: Object | undefined;
Expand Down
6 changes: 4 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,12 @@ export class ModernTreasury extends Core.APIClient {
...opts
}: ClientOptions = {}) {
if (apiKey === undefined) {
throw new Error(
throw new Errors.ModernTreasuryError(
"The MODERN_TREASURY_API_KEY environment variable is missing or empty; either provide it, or instantiate the ModernTreasury client with an apiKey option, like new ModernTreasury({ apiKey: 'my apiKey' }).",
);
}
if (organizationId === undefined) {
throw new Error(
throw new Errors.ModernTreasuryError(
"The MODERN_TREASURY_ORGANIZATION_ID environment variable is missing or empty; either provide it, or instantiate the ModernTreasury client with an organizationId option, like new ModernTreasury({ organizationId: 'my-organization-ID' }).",
);
}
Expand Down Expand Up @@ -199,6 +199,7 @@ export class ModernTreasury extends Core.APIClient {

static ModernTreasury = this;

static ModernTreasuryError = Errors.ModernTreasuryError;
static APIError = Errors.APIError;
static APIConnectionError = Errors.APIConnectionError;
static APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;
Expand All @@ -214,6 +215,7 @@ export class ModernTreasury extends Core.APIClient {
}

export const {
ModernTreasuryError,
APIError,
APIConnectionError,
APIConnectionTimeoutError,
Expand Down

0 comments on commit c8b64f9

Please sign in to comment.