@code-to-json/core
Version:
Core analysis tools for code-to-json
108 lines • 8.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@code-to-json/utils");
const processing_queue_1 = require("../processing-queue");
const declaration_1 = require("../serializers/declaration");
const node_1 = require("../serializers/node");
const source_file_1 = require("../serializers/source-file");
const symbol_1 = require("../serializers/symbol");
const type_1 = require("../serializers/type");
const config_1 = require("./config");
function postProcessSymbol({ symbols }, sym) {
if (sym.relatedSymbols) {
sym.relatedSymbols.forEach((relatedRef) => {
const related = symbols[utils_1.refId(relatedRef)];
if (related) {
const selfRef = utils_1.createRef('symbol', sym.id);
if (!related.relatedSymbols) {
related.relatedSymbols = [selfRef];
}
else {
const tracked = related.relatedSymbols.map((ref) => utils_1.refId(ref)).includes(sym.id);
if (!tracked) {
related.relatedSymbols.push();
}
}
}
});
}
}
function postProcessType({ types }, type) {
if (type.relatedTypes) {
type.relatedTypes.forEach((relatedRef) => {
const related = types[utils_1.refId(relatedRef)];
if (related) {
const selfRef = utils_1.createRef('type', type.id);
if (!related.relatedTypes) {
related.relatedTypes = [selfRef];
}
else {
const tracked = related.relatedTypes.map((ref) => utils_1.refId(ref)).includes(type.id);
if (!tracked) {
related.relatedTypes.push();
}
}
}
});
}
}
function postprocessData(wod) {
const { symbols, types } = wod;
Object.keys(symbols).forEach((s) => {
const sym = symbols[s];
if (sym) {
postProcessSymbol(wod, sym);
}
});
Object.keys(types).forEach((s) => {
const typ = types[s];
if (typ) {
postProcessType(wod, typ);
}
});
}
/**
* Walk a typescript program, using specified entry points, returning JSON information describing the code
*
* @param program typescript program to analyze
* @param host abstraction of the host this program is running on
* @param options
*/
function walkProgram(program, host, options = {}) {
const cfg = new config_1.default(options);
// Create the type-checker
const checker = program.getTypeChecker();
// Get all non-declaration source files
const sourceFiles = program.getSourceFiles().filter((sf) => cfg.shouldIncludeSourceFile(sf));
// Initialize the work-processing queue
const queue = processing_queue_1.create(checker);
sourceFiles.forEach((sf) => queue.queue(sf, 'sourceFile'));
const collector = {
queue,
host,
cfg,
};
/**
* set up the processors for the queue, and iteratively drain until
* we reach the iteration limit or no more work remains
*/
const data = queue.process({
mapNode: (ref, item, related) => node_1.default(item, checker, ref, related, collector),
mapType: (ref, item, related) => type_1.default(item, checker, ref, related, collector),
mapSourceFile: (ref, item, related) => source_file_1.default(item, checker, ref, related, collector),
mapSymbol: (ref, item, related) => symbol_1.default(item, checker, ref, related, collector),
mapDeclaration: (ref, item, related) => declaration_1.default(item, checker, ref, related, collector),
});
postprocessData(data);
return {
codeToJson: {
versions: {
core: 'pkg.version',
},
format: 'raw',
},
data,
};
}
exports.walkProgram = walkProgram;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2Fsa2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0NBQXVEO0FBR3ZELDBEQUE0RDtBQUM1RCw0REFBOEQ7QUFDOUQsOENBQWdEO0FBQ2hELDREQUE2RDtBQUM3RCxrREFBb0Q7QUFDcEQsOENBQWdEO0FBSWhELHFDQUFvQztBQUdwQyxTQUFTLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxFQUFvQixFQUFFLEdBQXFCO0lBQzdFLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtRQUN0QixHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFpQyxPQUFPLENBQUMsYUFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsTUFBTSxPQUFPLEdBQUcsaUJBQVMsQ0FBd0IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEM7cUJBQU07b0JBQ0wsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pGLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ1osT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQW9C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
;