in packages/babel-plugin-fbt/src/FbtUtil.js [179:222]
function checkOption<K: string>(
option: string,
validOptions: FbtOptionConfig<K>,
value: ?BabelNode | string | boolean,
): K {
// $FlowFixMe[incompatible-cast] consider
const optionName = (option: K);
const validValues = validOptions[optionName];
if (!validOptions.hasOwnProperty(optionName) || validValues == null) {
throw errorAt(
isNode(value) ? value : null,
`Invalid option "${optionName}". ` +
`Only allowed: ${Object.keys(validOptions).join(', ')} `,
);
} else if (validValues !== true) {
let valueStr;
if (typeof value === 'string' || typeof value === 'boolean') {
valueStr = value.toString();
} else if (
isNode(value) &&
(isStringLiteral(value) || isBooleanLiteral(value))
) {
valueStr = value && value.value.toString();
} else {
throw errorAt(
isNode(value) ? value : null,
`Option "${optionName}" has an invalid value. ` +
`Expected a string literal but value is \`${varDump(
value,
)}\` (${typeof value})`,
);
}
if (!validValues[valueStr]) {
throw errorAt(
isNode(value) ? value : null,
`Option "${optionName}" has an invalid value: "${valueStr}". ` +
`Only allowed: ${Object.keys(validValues).join(', ')}`,
);
}
}
return optionName;
}