easy-currencies
Version:
A tool for easy conversion of currencies.
154 lines • 9.05 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveProviders = exports.Config = void 0;
const axios_1 = __importDefault(require("axios"));
const providers_1 = require("./providers");
const utils_1 = require("./utils");
/**
* Config object that initializes with configuration data
* passed in by the user.
*
* @export
* @class Config
*/
class Config {
/**
* Provider getter.
*
* @returns {Provider[]}
* @memberof Config
*/
get providers() {
return this._active;
}
/**
* Provider setter (adder).
*
* @param {Provider[]} providers - providers to be added
* @param {boolean} [setActive=false] - should the new provider(s) be prioritized
* @returns {void}
* @memberof Config
*/
addProviders(providers, setActive) {
providers = providers.filter((p) => {
return !this._active.find((a) => a == p);
});
if (setActive) {
this._active.unshift(...providers);
return;
}
this._active.push(...providers);
return;
}
/**
* Returns the current provider
*
* @returns {Provider} - current provider
* @memberof Config
*/
activeProvider() {
return this._active[0];
}
/**
* Creates an instance of Config.
* @param {(...ProviderReference[] | undefined[] | string[])} config
* @memberof Config
*/
constructor(...config) {
/**
* Active client.
*/
this._client = axios_1.default.create();
/**
* Client setter.
* @param client The client.
*/
this.setClient = (client) => {
this._client = client;
};
/**
* Client getter.
*/
this.getClient = () => {
return this._client;
};
/**
* Adds a single new, user-defined provider to the list of providers.
*
* @param {string} name - the new provider name
* @param {Provider} provider - the new provider object
* @param {boolean} [setActive=false] - should the new provider(s) be prioritized
* @memberof Config
*/
this.add = (name, provider, setActive = false) => {
this.addMultiple([{ name, provider }], setActive);
};
/**
* Adds multiple new, user-defined provider to the list of providers.
*
* @param {UserDefinedProvider[]} providers - providers to be added
* @param {boolean} [setActive=false] - should the new provider(s) be prioritized
* @memberof Config
*/
this.addMultiple = (newProviders, setActive = false) => {
// Duplicate check
newProviders.forEach((p) => {
if (!(0, utils_1.checkIfUserDefinedProvider)(p)) {
throw "Invalid provider format!";
}
if (providers_1.providers[p.name]) {
throw "A provider by this name is already registered!";
}
providers_1.providers[p.name] = p.provider;
});
// Adding provider to active providers
this.addProviders(newProviders.map((p) => p.provider), setActive);
};
/**
* Removes a specific provider
* @param {Provider} provider - provider to be removed
* @memberof Config
*/
this.remove = (provider) => {
this._active = this._active.filter((p) => p != provider);
};
this._active = resolveProviders(...config);
// adding default fallback
this.addProviders([providers_1.providers.ExchangeRateAPI], false);
}
}
exports.Config = Config;
/**
* Config resolver that normalizes configuration input into the config interface
*
* @export
* @param {(...ProviderReference[] | undefined[] | string[])} configuration
* @returns {Provider[]}
*/
function resolveProviders(...configuration) {
// resolve default if none provided.
if (typeof configuration === "undefined" || !configuration.length) {
return [providers_1.providers.ExchangeRateAPI];
}
// checking for incorrect config types
if (typeof configuration[0] !== "object" &&
typeof configuration[0] !== "undefined" &&
typeof configuration[0] !== "string") {
throw "You must either supply nothing or a config object (see the 'config' section to see the different APIs that can be used)";
}
// returning single provider
if (typeof configuration[0] === "string") {
// constructing in initializationConfig object from string values
return [(0, providers_1.resolveProvider)({ name: configuration[0], key: configuration[1] })];
}
// configuration is an array of providers
// casting
const initializationConfig = configuration;
// resolving all providers
return initializationConfig.map((provider) => (0, providers_1.resolveProvider)(provider));
}
exports.resolveProviders = resolveProviders;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnRzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBNkM7QUFDN0MsMkNBTXFCO0FBRXJCLG1DQUFxRDtBQVdyRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLE1BQU07SUFTakI7Ozs7O09BS0c7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQXNCRDs7Ozs7OztPQU9HO0lBQ0ssWUFBWSxDQUFDLFNBQXFCLEVBQUUsU0FBa0I7UUFDNUQsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPO0lBQ1QsQ0FBQztJQXlERDs7Ozs7T0FLRztJQUNILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLEdBQUcsTUFBb0Q7UUEvR25FOztXQUVHO1FBQ0ssWUFBTyxHQUFrQixlQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEQ7OztXQUdHO1FBQ0gsY0FBUyxHQUFHLENBQUMsTUFBcUIsRUFBUSxFQUFFO1lBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcs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
;