featherbone-shipengine
Version:
Forked and patched version of the official ShipEngine JavaScript SDK for Node.js
66 lines • 2.19 kB
JavaScript
import { ShipEngineError } from "./errors";
import * as assert from "./utils/assert";
/**
* Normalized and sanitized config settings.
*/
export class NormalizedConfig {
constructor(config) {
if (typeof config === "string") {
// Only an API key was specified
config = { apiKey: config };
}
if (!config ||
(typeof config.apiKey === "string" && config.apiKey.trim().length === 0)) {
throw new ShipEngineError("validation", "field_value_required", "A ShipEngine API key must be specified.");
}
assert.isPOJO("Config", config);
// API Key
assert.isNonWhitespaceString("API Key", config.apiKey);
this.apiKey = config.apiKey;
// Base URL
if (config.baseURL instanceof URL) {
this.baseURL = config.baseURL;
}
else if (config.baseURL) {
assert.isNonWhitespaceString("Base URL", config.baseURL);
this.baseURL = new URL(config.baseURL);
}
else {
this.baseURL = new URL("https://api.shipengine.com/");
}
// Page Size
if (config.pageSize === undefined) {
this.pageSize = 50;
}
else {
assert.isPositiveInteger("Page Size", config.pageSize);
this.pageSize = config.pageSize;
}
// Retries
if (config.retries === undefined) {
this.retries = 1;
}
else {
assert.isNonNegativeInteger("Retries", config.retries);
this.retries = config.retries;
}
// Timeout
if (config.timeout === undefined) {
this.timeout = 5000;
}
else {
assert.isPositiveInteger("Timeout", config.timeout);
this.timeout = config.timeout;
}
}
/**
* Merges a base configuration and overrides, returning a new NormalizedConfig object.
*/
static merge(baseConfig, overrides) {
if (overrides) {
assert.isPOJO("Config", overrides);
}
return new NormalizedConfig({ ...baseConfig, ...overrides });
}
}
//# sourceMappingURL=config.js.map