apollo-error-converter
Version:
Global Apollo Server Error handling made easy. Remove verbose and repetitive resolver / data source Error handling. Ensures no implementation details are ever leaked while preserving internal Error logging.
59 lines (50 loc) • 1.4 kB
JavaScript
const {
isOneOfTypes,
mergeErrorMaps,
fallbackIsValid,
validateErrorMap,
} = require("./utils");
const {
defaultLogger,
defaultFallback,
mapItemShape: { requiredKeys, optionalKeys },
} = require("../core/constants");
/**
* Parses configuration options for ApolloErrorConverter construction
* - all are optional and use defaults for simple construction
* @param {ConfigOptions} options
*/
const parseConfigOptions = (options) => {
/* eslint no-console: 0 */
const { logger, fallback, errorMap } = options;
const config = {
errorMap: {},
shouldLog: true,
logger: defaultLogger,
fallback: defaultFallback,
};
if (logger === false) {
config.shouldLog = false;
} else if (typeof logger === "function") {
config.logger = logger;
} else if (!isOneOfTypes(logger, ["undefined", "boolean", "function"])) {
console.warn(
"[Apollo Error Converter] invalid logger option, using default logger",
);
}
if (fallback) {
if (fallbackIsValid(fallback)) {
config.fallback = fallback;
} else {
console.warn(
"[Apollo Error Converter] invalid fallback option, using default fallback",
);
}
}
if (errorMap) {
const mergedMap = mergeErrorMaps(errorMap);
config.errorMap = validateErrorMap(mergedMap, requiredKeys, optionalKeys);
}
return config;
};
module.exports = parseConfigOptions;