in packages/babel-plugin-fbt/src/FbtUtil.js [100:141]
function validateNamespacedFbtElement(
moduleName: string,
node: BabelNode,
): string {
let valid = false;
let handlerName;
// Actual namespaced version, e.g. <fbt:param>
if (isJSXNamespacedName(node)) {
handlerName = node.name.name;
valid =
isJSXIdentifier(node.namespace) &&
node.namespace.name === moduleName &&
(handlerName === 'enum' ||
handlerName === 'param' ||
handlerName === 'plural' ||
handlerName === 'pronoun' ||
handlerName === 'name' ||
handlerName === 'same-param');
// React's version, e.g. <FbtParam>, or <FbtEnum>
} else if (isJSXIdentifier(node)) {
handlerName = node.name.substr(3).toLowerCase();
valid =
node.name === 'FbtEnum' ||
node.name === 'FbtParam' ||
node.name === 'FbtPlural' ||
node.name === 'FbtPronoun' ||
node.name === 'FbtName' ||
node.name === 'FbtSameParam';
}
if (!valid) {
handlerName = 'implicitParamMarker';
}
if (handlerName === 'same-param' || handlerName === 'sameparam') {
handlerName = 'sameParam';
}
invariant(handlerName != null, 'handlerName must not be null');
return handlerName;
}