UNPKG

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
"use strict"; /// <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 = {}));