@itrocks/parameter-name
Version:
Runtime parameter name reflection from TypeScript declaration files
29 lines • 1.24 kB
JavaScript
import { readFileSync } from 'node:fs';
import ts from 'typescript';
export function parameterNamesFromFile(fileName, className, methodName) {
const isMethod = (methodName === 'constructor')
? ts.isConstructorDeclaration
: function (node) {
return ts.isMethodDeclaration(node) && node.name && ts.isIdentifier(node.name) && (node.name.text === methodName);
};
const content = readFileSync(fileName.substring(0, fileName.lastIndexOf('.')) + '.d.ts', 'utf8');
const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true);
let propertyNames = new Array;
function searchClass(node) {
if (ts.isClassDeclaration(node)
&& node.name
&& ts.isIdentifier(node.name)
&& (node.name.text === className)) {
return ts.forEachChild(node, searchMethod);
}
ts.forEachChild(node, searchClass);
}
function searchMethod(node) {
if (isMethod(node)) {
propertyNames = node.parameters.map(parameter => ts.isIdentifier(parameter.name) ? parameter.name.text : '');
}
}
searchClass(sourceFile);
return propertyNames;
}
//# sourceMappingURL=parameter-name.js.map