typescript-closure-tools
Version:
Command-line tools to convert closure-style JSDoc annotations to typescript, and to convert typescript sources to closure externs files
54 lines (53 loc) • 2.08 kB
JavaScript
/// <reference path="../index/typescript-services.d.ts" />
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
var ts = require('./typescript_services.js');
var Main;
(function (Main) {
var fileNames = process.argv.slice(2);
// If user gave command line arguments, they are file names to process
if (fileNames.length > 0) {
fileNames.forEach(fileName => {
var sourceText = fs.readFileSync(fileName, 'utf8');
process_source(fileName, sourceText);
});
}
// Otherwise use standard input
else {
var sourceText = '';
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
sourceText += process.stdin.read();
});
process.stdin.on('end', () => {
process_source('stdin', sourceText);
});
}
function process_source(fileName, sourceText) {
var parsed = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.ES5);
find_interfaces(parsed);
}
function find_interfaces(node) {
if (node.kind === ts.SyntaxKind.InterfaceDeclaration) {
var interfaceDeclaration = node;
var interfaceName = '$$$' + interfaceDeclaration.name.text;
process.stdout.write('var ' + interfaceName + ';\n');
function print_members(member) {
if (member) {
if (member.name) {
var declaration = member;
var declarationName = declaration.name.text;
process.stdout.write(interfaceName + '.' + declarationName + ';\n');
}
if (member.type && member.type.members) {
member.type.members.forEach(print_members);
}
}
}
interfaceDeclaration.members.forEach(print_members);
process.stdout.write('\n');
}
ts.forEachChild(node, find_interfaces);
}
})(Main || (Main = {}));
;