typescript-closure-tools
Version:
Command-line tools to convert closure-style JSDoc annotations to typescript, and to convert typescript sources to closure externs files
47 lines (46 loc) • 1.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
function set_deep(parent, keys, value) {
for (var i = 0; i < keys.length - 1; i++)
parent = parent[keys[i]] || (parent[keys[i]] = {});
parent[keys[i]] = value;
}
/**
* Combine classes, interfaces, and modules
*
* @param file
* @returns {Symbols}
*/
function members(file) {
var acc = {
classes: {},
modules: {}
};
Object.keys(file).forEach(name => {
var symbol = file[name];
// Class and constructor
if (symbol.jsdoc.tags.some(t => t.title === 'interface') ||
symbol.jsdoc.tags.some(t => t.title === 'constructor')) {
acc.classes[name] = { '': symbol };
}
// Member of class or interface
else if (name.indexOf('.prototype.') !== -1) {
var parts = name.split('.prototype.');
var className = parts[0];
var memberName = parts[1];
if (acc.classes[className])
acc.classes[className][memberName] = symbol;
}
// Static member of module
else {
var dot = name.lastIndexOf('.');
var moduleName = name.substring(0, dot);
var memberName = name.substring(dot + 1);
if (!acc.modules[moduleName])
acc.modules[moduleName] = {};
acc.modules[moduleName][memberName] = symbol;
}
});
return acc;
}
exports.members = members;
;