in packages/metro-source-map/src/generateFunctionMap.js [343:406]
function getNamePartsFromId(id: Node): $ReadOnlyArray<string> {
if (!id) {
return [];
}
if (isAnyCallExpression(id)) {
return getNamePartsFromId(id.callee);
}
if (isTypeCastExpression(id)) {
return getNamePartsFromId(id.expression);
}
let name;
if (isAnyIdentifier(id)) {
name = id.name;
} else if (isNullLiteral(id)) {
name = 'null';
} else if (isRegExpLiteral(id)) {
name = `_${id.pattern}_${id.flags ?? ''}`;
} else if (isTemplateLiteral(id)) {
name = id.quasis.map(quasi => quasi.value.raw).join('');
} else if (isLiteral(id) && id.value != null) {
name = String(id.value);
}
if (name != null) {
return [t.toBindingIdentifierName(name)];
}
if (isImport(id)) {
name = 'import';
}
if (name != null) {
return [name];
}
if (isAnyMemberExpression(id)) {
if (
isAnyIdentifier(id.object) &&
id.object.name === 'Symbol' &&
(isAnyIdentifier(id.property) || isLiteral(id.property))
) {
const propertyName = getNameFromId(id.property);
if (propertyName) {
name = '@@' + propertyName;
}
} else {
const propertyName = getNamePartsFromId(id.property);
if (propertyName.length) {
const objectName = getNamePartsFromId(id.object);
if (objectName.length) {
return [...objectName, ...propertyName];
} else {
return propertyName;
}
}
}
}
return name ? [name] : [];
}