@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
30 lines (28 loc) • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAllSourceFiles = void 0;
const tslib_1 = require("tslib");
const ts_utils_1 = require("@neo-one/ts-utils");
const utils_1 = require("@neo-one/utils");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const getAllSourceFilesWorker = (sourceFiles, typeChecker, seen = new Set()) => sourceFiles.reduce((acc, sourceFile) => {
if (seen.has(sourceFile)) {
return [];
}
seen.add(sourceFile);
const importSourceFiles = ts_utils_1.tsUtils.statement
.getStatements(sourceFile)
.filter(typescript_1.default.isImportDeclaration)
.map((decl) => ts_utils_1.tsUtils.importExport.getModuleSpecifierSourceFile(typeChecker, decl))
.filter(utils_1.utils.notNull);
const exportSourceFiles = ts_utils_1.tsUtils.statement
.getStatements(sourceFile)
.filter(typescript_1.default.isExportDeclaration)
.map((decl) => ts_utils_1.tsUtils.importExport.getModuleSpecifierSourceFile(typeChecker, decl))
.filter(utils_1.utils.notNull);
const files = [...new Set(importSourceFiles.concat(exportSourceFiles))];
const result = getAllSourceFilesWorker(files, typeChecker, seen);
return acc.concat(result).concat([sourceFile]);
}, []);
exports.getAllSourceFiles = (sourceFiles, typeChecker) => new Set(getAllSourceFilesWorker(sourceFiles, typeChecker));
//# sourceMappingURL=getAllSourceFiles.js.map