src/config.js

Summary

Maintainability
A
45 mins
Test Coverage
import defaultConfig from './defaultConfig'
import { isType, isString } from './lib/check'

export default class Config {
    static create(...args) {
        const configObjects = args.filter((arg) => arg)

        if (
            !configObjects.every((configObject) =>
                isType(configObject, 'object')
            )
        ) {
            throw new Error('Expected Config parameter to have type object')
        }

        return Object.assign({}, defaultConfig, ...args)
    }

    static processPreInitConfig(preinitConfig, api) {
        if (preinitConfig.headers) {
            api.setDefaultHeaders(preinitConfig.headers)
        }

        if (preinitConfig.baseUrl) {
            api.setBaseUrl(preinitConfig.baseUrl)
        }
    }

    // eslint-disable-next-line complexity
    static processConfigForD2(config, d2) {
        const api = d2.Api.getApi()
        d2.model.ModelDefinition.prototype.api = api
        d2.models = d2.model.ModelDefinitions.getModelDefinitions()

        if (isString(config.baseUrl)) {
            api.setBaseUrl(config.baseUrl)
        } else {
            // default to the current version of the `/api`
            api.setBaseUrl('/api')
        }

        if (config.headers) {
            api.setDefaultHeaders(config.headers)
        }

        if (config.unauthorizedCb) {
            api.setUnauthorizedCallback(config.unauthorizedCb)
        }

        if (config.i18n && config.i18n.sources) {
            Array.from(config.i18n.sources).forEach((source) =>
                d2.i18n.addSource(source)
            )
        }

        if (config.i18n && config.i18n.strings) {
            d2.i18n.addStrings(Array.from(config.i18n.strings))
        }
    }
}