@code-to-json/core
Version:
[](https://travis-ci.org/code-to-json/code-to-json) [](https://d
112 lines • 10.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@code-to-json/utils");
const debug = require("debug");
const generate_id_1 = require("./generate-id");
const log = debug('code-to-json:processor');
/**
* Create a new processing queue
*/
function create() {
const registries = {
node: utils_1.createQueue('node', generate_id_1.default),
symbol: utils_1.createQueue('symbol', generate_id_1.default),
type: utils_1.createQueue('type', generate_id_1.default),
sourceFile: utils_1.createQueue('sourceFile', generate_id_1.default),
declaration: utils_1.createQueue('declaration', generate_id_1.default),
};
return {
queue(thing, typ, _checker) {
const refType = typ;
switch (refType) {
case 'declaration':
return registries.declaration.queue(thing);
case 'symbol':
return registries.symbol.queue(thing);
case 'type':
return registries.type.queue(thing);
case 'node':
return registries.node.queue(thing);
case 'sourceFile':
return registries.sourceFile.queue(thing);
default:
throw new utils_1.UnreachableError(refType);
}
},
drain(sink) {
const out = {
declaration: {},
symbol: {},
type: {},
node: {},
sourceFile: {},
};
/**
* Flush any un-processed items from the processing queue to the drain output
*/
function flush() {
const outputInfo = {
processed: {
declaration: 0,
type: 0,
sourceFile: 0,
symbol: 0,
node: 0,
},
};
const { handleDeclaration, handleNode, handleSourceFile, handleType, handleSymbol } = sink;
if (handleSourceFile) {
outputInfo.processed.sourceFile += registries.sourceFile.drain(
// eslint-disable-next-line no-return-assign
(ref, item) => (out.sourceFile[utils_1.refId(ref)] = handleSourceFile(ref, item))).processedCount;
}
if (handleDeclaration) {
outputInfo.processed.declaration += registries.declaration.drain(
// eslint-disable-next-line no-return-assign
(ref, item) => (out.declaration[utils_1.refId(ref)] = handleDeclaration(ref, item))).processedCount;
}
if (handleSymbol) {
outputInfo.processed.symbol += registries.symbol.drain(
// eslint-disable-next-line no-return-assign
(ref, item) => (out.symbol[utils_1.refId(ref)] = handleSymbol(ref, item))).processedCount;
}
if (handleNode) {
outputInfo.processed.node += registries.node.drain(
// eslint-disable-next-line no-return-assign
(ref, item) => (out.node[utils_1.refId(ref)] = handleNode(ref, item))).processedCount;
}
if (handleType) {
outputInfo.processed.type += registries.type.drain(
// eslint-disable-next-line no-return-assign
(ref, item) => (out.type[utils_1.refId(ref)] = handleType(ref, item))).processedCount;
}
return outputInfo;
}
const maxPasses = 60;
let flushCount = 1;
let lastResult;
let nonZeroCategories;
log(`Beginning processing queue drain (max passes: ${maxPasses})`);
do {
lastResult = flush();
nonZeroCategories = Object.keys(lastResult.processed).reduce(
// eslint-disable-next-line no-loop-func
(list, k) => (lastResult.processed[k] > 0 ? list.concat(k) : list), []);
const reportMessage = Object.keys(lastResult.processed)
.sort()
// eslint-disable-next-line no-loop-func
.map(k => {
const amt = lastResult.processed[k];
return amt > 0 ? `${amt} ${k}s` : null;
})
.filter(Boolean)
.join(', ');
log(`Pass ${flushCount} summary: ${reportMessage || "nothing. Looks like we're done"}`);
flushCount++;
} while (nonZeroCategories.length > 0 && flushCount < maxPasses);
return out;
},
};
}
exports.create = create;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvY2Vzc2luZy1xdWV1ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUFtRjtBQUNuRiwrQkFBK0I7QUFHL0IsK0NBQXVDO0FBV3ZDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBbUI1Qzs7R0FFRztBQUNILFNBQWdCLE1BQU07SUFDcEIsTUFBTSxVQUFVLEdBQUc7UUFDakIsSUFBSSxFQUFFLG1CQUFXLENBQWUsTUFBTSxFQUFFLHFCQUFVLENBQUM7UUFDbkQsTUFBTSxFQUFFLG1CQUFXLENBQWdCLFFBQVEsRUFBRSxxQkFBVSxDQUFDO1FBQ3hELElBQUksRUFBRSxtQkFBVyxDQUFlLE1BQU0sRUFBRSxxQkFBVSxDQUFDO1FBQ25ELFVBQVUsRUFBRSxtQkFBVyxDQUEyQixZQUFZLEVBQUUscUJBQVUsQ0FBQztRQUMzRSxXQUFXLEVBQUUsbUJBQVcsQ0FBNkIsYUFBYSxFQUFFLHFCQUFVLENBQUM7S0FDaEYsQ0FBQztJQUVGLE9BQU87UUFDTCxLQUFLLENBQ0gsS0FBbUIsRUFDbkIsR0FBTSxFQUNOLFFBQXFCO1lBRXJCLE1BQU0sT0FBTyxHQUFvQixHQUFHLENBQUM7WUFDckMsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxhQUFhO29CQUNoQixPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQW9CLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxRQUFRO29CQUNYLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBWSxDQUFDLENBQUM7Z0JBQy9DLEtBQUssTUFBTTtvQkFDVCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWEsQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLE1BQU07b0JBQ1QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFhLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxZQUFZO29CQUNmLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBbUIsQ0FBQyxDQUFDO2dCQUMxRDtvQkFDRSxNQUFNLElBQUksd0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFpQixJQUF3QztZQUM1RCxNQUFNLEdBQUcsR0FBZ0M7Z0JBQ3ZDLFdBQVcsRUFBRSxFQUFFO2dCQUNmLE1BQU0sRUFBRSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFO2dCQUNSLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxFQUFFO2FBQ2YsQ0FBQztZQUNGOztlQUVHO1lBQ0gsU0FBUyxLQUFLO2dCQUdaLE1BQU0sVUFBVSxHQUFHO29CQUNqQixTQUFTLEVBQUU7d0JBQ1QsV0FBVyxFQUFFLENBQUM7d0JBQ2QsSUFBSSxFQUFFLENBQUM7d0JBQ1AsVUFBVSxFQUFFLENBQUM7d0JBQ2IsTUFBTSxFQUFFLENBQUM7d0JBQ1QsSUFBSSxFQUFFLENBQUM7cUJBQ1I7aUJBQ0YsQ0FBQztnQkFDRixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQzNGLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDNUQsNENBQTRDO29CQUM1QyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDMUUsQ0FBQyxjQUFjLENBQUM7aUJBQ2xCO2dCQUNELElBQUksaUJBQWlCLEVBQUU7b0JBQ3JCLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDOUQsNENBQTRDO29CQUM1QyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDNUUsQ0FBQyxjQUFjLENBQUM7aUJBQ2xCO2dCQUNELElBQUksWUFBWSxFQUFFO29CQUNoQixVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUs7b0JBQ3BELDRDQUE0QztvQkFDNUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNsRSxDQUFDLGNBQWMsQ0FBQztpQkFDbEI7Z0JBQ0QsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLO29CQUNoRCw0Q0FBNEM7b0JBQzVDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDOUQsQ0FBQyxjQUFjLENBQUM7aUJBQ2xCO2dCQUNELElBQUksVUFBVSxFQUFFO29CQUNkLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSztvQkFDaEQsNENBQTRDO29CQUM1QyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQzlELENBQUMsY0FBYyxDQUFDO2lCQUNsQjtnQkFFRCxPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLFVBQThELENBQUM7WUFDbkUsSUFBSSxpQkFBMkIsQ0FBQztZQUNoQyxHQUFHLENBQUMsaURBQWlELFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkUsR0FBRztnQkFDRCxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU07Z0JBQzFELHdDQUF3QztnQkFDeEMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxTQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQzNFLEVBQWMsQ0FDZixDQUFDO2dCQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztxQkFDcEQsSUFBSSxFQUFFO29CQUNQLHdDQUF3QztxQkFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNQLE1BQU0sR0FBRyxHQUFJLFVBQVUsQ0FBQyxTQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQztxQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDO3FCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxHQUFHLENBQUMsUUFBUSxVQUFVLGFBQWEsYUFBYSxJQUFJLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztnQkFDeEYsVUFBVSxFQUFFLENBQUM7YUFDZCxRQUFRLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxHQUFHLFNBQVMsRUFBRTtZQUVqRSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXBIRCx3QkFvSEMifQ==
;