UNPKG

@itrocks/parameter-name

Version:

Runtime parameter name reflection from TypeScript declaration files

29 lines 1.24 kB
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