UNPKG

type2docfx

Version:

A tool to convert json format output from TypeDoc to schema driven reference model for DocFx to consume.

186 lines 6.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.insertInnerClassReference = exports.insertClassReferenceForModule = exports.postTransform = exports.insertFunctionToIndex = exports.groupOrphanFunctions = void 0; var constants_1 = require("./common/constants"); var regex_1 = require("./common/regex"); function groupOrphanFunctions(elements) { if (elements && elements.length) { var mapping = {}; for (var i = 0; i < elements.length; i++) { if (elements[i].type === 'function') { var key = elements[i].module ? elements[i].module : 'ParentToPackage'; if (!mapping[key]) { mapping[key] = []; } mapping[key].push(elements[i]); elements.splice(i, 1); i--; } } return mapping; } } exports.groupOrphanFunctions = groupOrphanFunctions; function insertFunctionToIndex(index, functions) { if (index && functions) { index.items[0].children = index.items[0].children.concat(functions.map(function (f) { return f.uid; })); index.items = index.items.concat(functions); } } exports.insertFunctionToIndex = insertFunctionToIndex; function postTransform(element, references) { var roots = flattening(element); for (var _i = 0, roots_1 = roots; _i < roots_1.length; _i++) { var root = roots_1[_i]; insertReferences(root, references); } return roots; } exports.postTransform = postTransform; function insertReferences(root, references) { if (!references || Object.keys(references).length === 0) { return; } root.references = []; for (var key in references) { var names = key.split('.'); var reference = { uid: key, name: names[names.length - 1], 'spec.typeScript': [] }; var match = void 0; var lastIndex = 0; while ((match = regex_1.uidRegex.exec(references[key])) !== null) { if (lastIndex < match.index) { reference['spec.typeScript'].push(getReference(references[key].substring(lastIndex, match.index))); } lastIndex = match.index + match[0].length; reference['spec.typeScript'].push(getReference(getItemName(match[1]), match[1])); } if (lastIndex < references[key].length) { reference['spec.typeScript'].push(getReference(references[key].substring(lastIndex))); } root.references.push(reference); } } // to add this function due to classes under modules need to be cross reference function insertClassReferenceForModule(flattenElements) { for (var _i = 0, flattenElements_1 = flattenElements; _i < flattenElements_1.length; _i++) { var element = flattenElements_1[_i]; if (element.items[0].type !== 'module') { continue; } if (!element.references) { element.references = []; continue; } var children = element.items[0].children; for (var _a = 0, children_1 = children; _a < children_1.length; _a++) { var child = children_1[_a]; var find = false; for (var _b = 0, _c = element.references; _b < _c.length; _b++) { var ref = _c[_b]; if (ref.uid === child) { find = true; break; } } if (!find) { var names = child.split('.'); var reference = { uid: child, name: names[names.length - 1] }; element.references.push(reference); } } } } exports.insertClassReferenceForModule = insertClassReferenceForModule; function insertInnerClassReference(innerClassReferenceMapping, transfomredClass) { if ((transfomredClass.items[0].type === 'class' || transfomredClass.items[0].type === 'interface') && innerClassReferenceMapping.has(transfomredClass.items[0].uid)) { var reference_1 = transfomredClass.references || []; var referencedClass = innerClassReferenceMapping.get(transfomredClass.items[0].uid); referencedClass.forEach(function (item) { var names = item.split('.'); var ref = { uid: item, name: names[names.length - 1] }; reference_1.push(ref); }); } } exports.insertInnerClassReference = insertInnerClassReference; function getReference(name, uid) { var reference = { name: name, fullName: name }; if (uid) { reference.uid = uid; } return reference; } function getItemName(uid) { var tmp = uid.split('.'); return tmp[tmp.length - 1]; } function flattening(element) { if (!element) { return []; } var result = []; result.push({ items: [element] }); if (element.children) { var childrenUid = []; var children = element.children; children = children.sort(sortYamlModel); for (var _i = 0, children_2 = children; _i < children_2.length; _i++) { var child = children_2[_i]; if (child.children && child.children.length > 0) { result = result.concat(flattening(child)); } else if (constants_1.setOfTopLevelItems.has(child.type)) { var resultWithoutChild = []; resultWithoutChild.push({ items: [child] }); result = result.concat(resultWithoutChild); } else { result[0].items.push(child); } if (child.type !== 'module') { childrenUid.push(child.uid); } } element.children = childrenUid; return result; } } function sortYamlModel(a, b) { if (a.numericValue !== undefined && b.numericValue !== undefined) { return a.numericValue - b.numericValue; } // sort classes alphabetically, contructor first if (b.name === constants_1.constructorName) { return 1; } if (a.name === constants_1.constructorName) { return -1; } var nameA = a.name.toUpperCase(); var nameB = b.name.toUpperCase(); if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } return 0; } //# sourceMappingURL=postTransformer.js.map