@code-to-json/core
Version:
[](https://travis-ci.org/code-to-json/code-to-json) [](https://d
71 lines • 6.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@code-to-json/utils");
const utils_ts_1 = require("@code-to-json/utils-ts");
const typescript_1 = require("typescript");
const flags_1 = require("../flags");
const location_1 = require("./location");
const signature_1 = require("./signature");
function appendSymbolMap(uem, queue, checker) {
if (uem && uem.size > 0) {
return utils_ts_1.mapUem(uem, (val) => queue.queue(val, 'symbol', checker)).filter(utils_1.isRef);
}
return undefined;
}
/**
* Serialize a TS Symbol
* @param symbol Symbol to serialize
* @param checker an instance of the TS type checker
* @param ref Reference to the symbol
* @param queue Processing queue
*/
function serializeSymbol(symbol, checker, ref, queue) {
const { exports, globalExports, members, flags, valueDeclaration } = symbol;
const details = {
id: utils_1.refId(ref),
entity: 'symbol',
name: symbol.getName(),
flags: flags_1.flagsToString(flags, 'symbol')
};
const typ = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
if (valueDeclaration && valueDeclaration.getSourceFile().isDeclarationFile) {
details.external = true;
return details;
}
details.type = queue.queue(typ, 'type', checker);
details.members = appendSymbolMap(members, queue, checker);
details.exports = appendSymbolMap(exports, queue, checker);
details.globalExports = appendSymbolMap(globalExports, queue, checker);
const docComment = symbol.getDocumentationComment(checker);
if (docComment.length > 0) {
details.documentation = typescript_1.displayPartsToString(docComment);
}
if (valueDeclaration) {
const { modifiers, decorators, pos, end } = valueDeclaration;
const valDeclType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
const sourceFile = valueDeclaration.getSourceFile();
details.location = location_1.default(sourceFile, pos, end);
details.sourceFile = queue.queue(sourceFile, 'sourceFile', checker);
details.modifiers = modifiers && modifiers.map(m => typescript_1.SyntaxKind[m.kind]);
details.decorators = decorators && decorators.map(d => typescript_1.SyntaxKind[d.kind]);
const constructorSignatures = valDeclType
.getConstructSignatures()
.map(s => signature_1.default(s, checker, queue));
if (constructorSignatures && constructorSignatures.length > 0) {
details.constructorSignatures = constructorSignatures;
}
const callSignatures = valDeclType
.getCallSignatures()
.map(s => signature_1.default(s, checker, queue));
if (callSignatures && callSignatures.length > 0) {
details.callSignatures = callSignatures;
}
}
const jsDocTags = symbol.getJsDocTags();
if (jsDocTags.length > 0) {
details.jsDocTags = [...jsDocTags];
}
return details;
}
exports.default = serializeSymbol;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZXJzL3N5bWJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUFtRDtBQUNuRCxxREFBZ0Q7QUFDaEQsMkNBTW9CO0FBQ3BCLG9DQUF5QztBQUl6Qyx5Q0FBMkM7QUFDM0MsMkNBQXNFO0FBMEJ0RSxTQUFTLGVBQWUsQ0FDdEIsR0FBMEMsRUFDMUMsS0FBc0IsRUFDdEIsT0FBb0I7SUFFcEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxpQkFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQUssQ0FBQyxDQUFDO0tBQ3JGO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQXdCLGVBQWUsQ0FDckMsTUFBVyxFQUNYLE9BQW9CLEVBQ3BCLEdBQWMsRUFDZCxLQUFzQjtJQUV0QixNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTVFLE1BQU0sT0FBTyxHQUFxQjtRQUNoQyxFQUFFLEVBQUUsYUFBSyxDQUFDLEdBQUcsQ0FBQztRQUNkLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEtBQUssRUFBRSxxQkFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7S0FDdEMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RSxJQUFJLGdCQUFnQixJ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