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

78 lines (77 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const parser = require("./parser"); const combine = require("./combine"); const options = require("./options"); var fileByProvide = {}; var providesByFile = {}; function parent_symbol(name) { var dot = name.lastIndexOf('.'); return name.substring(0, dot); } /** * @param symbolName * @returns file that goog.provide's name */ function file(symbolName) { if (symbolName) return fileByProvide[symbolName] || file(parent_symbol(symbolName)); else return null; } exports.file = file; /** * @param fileName * @returns value of name */ function symbols(fileName) { if (!providesByFile[fileName]) providesByFile[fileName] = combine.members(parser.jsdoc(fs.readFileSync(fileName, 'utf8'))); if (providesByFile[fileName]) return providesByFile[fileName]; } exports.symbols = symbols; function symbol(symbolName) { var fileName = file(symbolName); if (fileName) { var s = symbols(fileName); return s.classes[symbolName] || s.modules[symbolName]; } else return null; } exports.symbol = symbol; function member(symbolName) { var fileName = file(symbolName); if (fileName) { var s = symbols(fileName); var dot = symbolName.lastIndexOf('.'); var moduleName = symbolName.substring(0, dot); var memberName = symbolName.substring(dot + 1); var moduleValue = s.modules[moduleName] || {}; return moduleValue[memberName] || null; } else return null; } exports.member = member; // If user gives a TSV file with provided symbols, use that if (options.provides) { fs.readFileSync(options.provides, 'utf8').split('\n').forEach(line => { var columns = line.split('\t'); var file = columns[0]; var symbol = columns[1]; fileByProvide[symbol] = file; }); } // Otherwise parse all inputs else { options.todo.forEach(todo => { var found = symbols(todo.input); var classNames = Object.keys(found.classes); var moduleNames = Object.keys(found.modules); var names = classNames.concat(moduleNames); names.forEach(name => fileByProvide[name] = todo.input); }); }