@itrocks/parameter-name
Version:
Runtime parameter name reflection from TypeScript declaration files
35 lines • 1.73 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parameterNamesFromFile = parameterNamesFromFile;
const node_fs_1 = require("node:fs");
const typescript_1 = __importDefault(require("typescript"));
function parameterNamesFromFile(fileName, className, methodName) {
const isMethod = (methodName === 'constructor')
? typescript_1.default.isConstructorDeclaration
: function (node) {
return typescript_1.default.isMethodDeclaration(node) && node.name && typescript_1.default.isIdentifier(node.name) && (node.name.text === methodName);
};
const content = (0, node_fs_1.readFileSync)(fileName.substring(0, fileName.lastIndexOf('.')) + '.d.ts', 'utf8');
const sourceFile = typescript_1.default.createSourceFile(fileName, content, typescript_1.default.ScriptTarget.Latest, true);
let propertyNames = new Array;
function searchClass(node) {
if (typescript_1.default.isClassDeclaration(node)
&& node.name
&& typescript_1.default.isIdentifier(node.name)
&& (node.name.text === className)) {
return typescript_1.default.forEachChild(node, searchMethod);
}
typescript_1.default.forEachChild(node, searchClass);
}
function searchMethod(node) {
if (isMethod(node)) {
propertyNames = node.parameters.map(parameter => typescript_1.default.isIdentifier(parameter.name) ? parameter.name.text : '');
}
}
searchClass(sourceFile);
return propertyNames;
}
//# sourceMappingURL=parameter-name.js.map