type2docfx
Version:
A tool to convert json format output from TypeDoc to schema driven reference model for DocFx to consume.
131 lines • 5.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.typeToString = exports.resolveIds = void 0;
var regex_1 = require("./common/regex");
var constants_1 = require("./common/constants");
function resolveIds(element, uidMapping, referenceMapping) {
if (element.syntax) {
if (element.syntax.parameters) {
for (var _i = 0, _a = element.syntax.parameters; _i < _a.length; _i++) {
var p = _a[_i];
p.type = restoreReferences(p.type, uidMapping, referenceMapping);
}
}
if (element.syntax.return) {
element.syntax.return.type = restoreReferences(element.syntax.return.type, uidMapping, referenceMapping);
}
}
if (element.extends) {
element.extends.name = restoreReferences([element.extends.name], uidMapping, referenceMapping)[0];
}
for (var _b = 0, _c = element.children; _b < _c.length; _b++) {
var child = _c[_b];
resolveIds(child, uidMapping, referenceMapping);
if (constants_1.setOfTopLevelItems.has(child.type)) {
referenceMapping[child.uid] = "@uid:" + child.uid + "!@";
}
}
}
exports.resolveIds = resolveIds;
function restoreReferences(types, uidMapping, referenceMapping) {
var restoredTypes = restoreTypes(types, uidMapping);
return restoredTypes.map(function (restoreType) {
if (restoreType) {
var hasUid_1 = false;
var restoreTypeTrim = restoreType.replace(regex_1.uidRegex, function (match, uid) {
if (uid) {
hasUid_1 = true;
return uid;
}
return match;
});
if (hasUid_1 && referenceMapping[restoreTypeTrim] !== null) {
referenceMapping[restoreTypeTrim] = restoreType;
}
return restoreTypeTrim;
}
return restoreType;
});
}
function restoreTypes(types, uidMapping) {
if (types) {
return types.map(function (t) { return restoreType(t, uidMapping); });
}
return null;
}
function restoreType(type, uidMapping) {
if (typeof (type) === 'string') {
return type;
}
if (type.reflectedType) {
type.reflectedType.key = restoreType(type.reflectedType.key, uidMapping);
type.reflectedType.value = restoreType(type.reflectedType.value, uidMapping);
}
else if (type.genericType) {
type.genericType.inner = type.genericType.inner.map(function (t) { return restoreType(t, uidMapping); });
type.genericType.outter = restoreType(type.genericType.outter, uidMapping);
}
if (type.unionType) {
type.unionType.types = type.unionType.types.map(function (t) { return restoreType(t, uidMapping); });
}
else if (type.intersectionType) {
type.intersectionType.types = type.intersectionType.types.map(function (t) { return restoreType(t, uidMapping); });
}
else if (type.arrayType) {
type.arrayType = restoreType(type.arrayType, uidMapping);
}
else {
if (type.typeId && uidMapping[type.typeId]) {
type.typeName = "@uid:" + uidMapping[type.typeId] + "!@";
}
}
return typeToString(type);
}
function typeToString(type, kind) {
if (!type) {
return 'function';
}
if (typeof (type) === 'string') {
if (type[0] === '@') {
return type;
}
else if (kind && kind !== 'Property') {
var t = type.split('.');
return t[t.length - 1];
}
else {
return type;
}
}
if (type.reflectedType) {
return "[key: " + typeToString(type.reflectedType.key) + "]: " + typeToString(type.reflectedType.value);
}
else if (type.genericType) {
return typeToString(type.genericType.outter) + "<" + (type.genericType.inner.map(function (t) { return typeToString(t); }).join(', ')) + ">";
}
else if (type.unionType) {
var content = type.unionType.types.map(function (t) { return typeToString(t); }).join(' | ');
if (type.parentType && type.parentType !== 'union') {
content = '(' + content + ')';
}
return content;
}
else if (type.intersectionType) {
var content = type.intersectionType.types.map(function (t) { return typeToString(t); }).join(' & ');
if (type.parentType && type.parentType !== 'intersection') {
content = '(' + content + ')';
}
return content;
}
else if (type.arrayType) {
return typeToString(type.arrayType) + "[]";
}
else if (type.tupleType) {
return '[' + type.tupleType.types.map(function (t) { return typeToString(t); }).join(', ') + ']';
}
else {
return typeToString(type.typeName);
}
}
exports.typeToString = typeToString;
//# sourceMappingURL=idResolver.js.map