mirror of
https://github.com/hanzoai/insights-js.git
synced 2026-10-30 18:34:19 +00:00
51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
const apiExtractor = require('@microsoft/api-extractor-model');
|
|
|
|
/**
|
|
* Finds a class or interface by name in the API package
|
|
* @param {string} typeName - Name of the type to find
|
|
* @param {any} apiPackage - API package to search in
|
|
* @returns {any|null} - Found class or null
|
|
*/
|
|
const findTypeInPackage = (typeName, apiPackage) => {
|
|
for (const entryPoint of apiPackage.entryPoints) {
|
|
for (const member of entryPoint.members) {
|
|
if (member.name === typeName && member.kind === apiExtractor.ApiItemKind.Class) {
|
|
return member;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
|
|
/**
|
|
* Recursively traverses inheritance chain and collects all classes
|
|
* @param {any} startClass - Class to start traversal from
|
|
* @param {any} apiPackage - API package for resolving parent classes
|
|
* @returns {any[]} - Array of classes in inheritance chain (child to parent order)
|
|
*/
|
|
const getInheritanceChain = (startClass, apiPackage) => {
|
|
const chain = [];
|
|
|
|
const traverseInheritance = (currentClass) => {
|
|
if (!currentClass || chain.includes(currentClass)) return;
|
|
|
|
chain.push(currentClass);
|
|
|
|
// Process parent class
|
|
if (currentClass.extendsType?.excerpt) {
|
|
const parentTypeName = currentClass.extendsType.excerpt.text.trim();
|
|
const parentClass = findTypeInPackage(parentTypeName, apiPackage);
|
|
if (parentClass) {
|
|
traverseInheritance(parentClass);
|
|
}
|
|
}
|
|
};
|
|
|
|
traverseInheritance(startClass);
|
|
return chain;
|
|
};
|
|
|
|
module.exports = {
|
|
findTypeInPackage,
|
|
getInheritanceChain
|
|
}; |