UNPKG

@code-to-json/core

Version:
108 lines 8.58 kB
"use strict"; 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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