@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
26 lines (24 loc) • 1.19 kB
JavaScript
import { tsUtils } from '@neo-one/ts-utils';
import { utils } from '@neo-one/utils';
import ts from 'typescript';
const getAllSourceFilesWorker = (sourceFiles, typeChecker, seen = new Set()) => sourceFiles.reduce((acc, sourceFile) => {
if (seen.has(sourceFile)) {
return [];
}
seen.add(sourceFile);
const importSourceFiles = tsUtils.statement
.getStatements(sourceFile)
.filter(ts.isImportDeclaration)
.map((decl) => tsUtils.importExport.getModuleSpecifierSourceFile(typeChecker, decl))
.filter(utils.notNull);
const exportSourceFiles = tsUtils.statement
.getStatements(sourceFile)
.filter(ts.isExportDeclaration)
.map((decl) => tsUtils.importExport.getModuleSpecifierSourceFile(typeChecker, decl))
.filter(utils.notNull);
const files = [...new Set(importSourceFiles.concat(exportSourceFiles))];
const result = getAllSourceFilesWorker(files, typeChecker, seen);
return acc.concat(result).concat([sourceFile]);
}, []);
export const getAllSourceFiles = (sourceFiles, typeChecker) => new Set(getAllSourceFilesWorker(sourceFiles, typeChecker));
//# sourceMappingURL=getAllSourceFiles.js.map