beyond
Version:
The Full Stack Universal Typescript Framework
40 lines (30 loc) • 1.15 kB
JavaScript
const ts = require('typescript');
/**
* Extract the dependencies and exports of a typescript source code
*
* @param file {string} The relative path of the file
* @param content {string} The content of the file
* @return {{dependencies: Map, exports: Set}}
*/
module.exports = function (file, content) {
const output = {};
output.dependencies = new Map();
output.exports = new Set();
if (!content) return output;
const source = ts.createSourceFile(file, content);
// Find triple slash directives
const re = /^\/\/\/\s*<reference\s*path\s*=\s*["'](.*)["'].*$/gm;
let dependency;
while ((dependency = re.exec(content))) {
output.dependencies.set(dependency, new Set(['reference']));
}
// Traverse AST
const visit = node => {
if (node.kind === ts.SyntaxKind.SourceFile) return;
require('./dependencies')(node, output.dependencies);
require('./exports')(node, source, output.exports);
}
ts.forEachChild(source, visit);
output.exports = [...output.exports].map(name => ({name, from: name}));
return output;
};