@webdoc/externalize
Version:
Links your documentation to external APIs and vice versa!
104 lines (99 loc) • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = write;
exports.fromTree = fromTree;
var _const = require("./const");
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const LATEST_VERSION = "1.0.0";
const TRUNCATE_128 = {
length: 128,
omission: "..."
};
function serializeDataType(dataType) {
const tokensSerialized = new Array(dataType.length);
for (let i = 0; i < dataType.length; i++) {
const token = dataType[i];
tokensSerialized[i] = typeof token === "string" ? {
value: token,
kind: "canonical"
} : {
value: token.path,
kind: "link"
};
}
return {
tokens: tokensSerialized,
template: dataType.template
};
}
function serializeParams(params) {
return params.map((param) => {
const serializedParam = _lodash.default.pick(param, _const.PARAM_PROPS);
if (param.description) {
serializedParam.description = _lodash.default.truncate(param.description, TRUNCATE_128);
}
if (param.dataType) {
serializedParam.dataType = serializeDataType(param.dataType);
}
return serializedParam;
});
}
function serializeReturns(returns) {
return returns.map((returnItem) => {
const serializedReturn = {};
if (returnItem.description) {
serializedReturn.description = _lodash.default.truncate(returnItem.description, TRUNCATE_128);
}
if (returnItem.dataType) {
serializedReturn.dataType = serializeDataType(returnItem.dataType);
}
return serializedReturn;
});
}
function serializeDocumentLinks(links) {
return links.map(link => typeof link === "string" ? link : link.path);
}
function serializeTree(doc) {
const serialized = _lodash.default.pick(doc, _const.BASE_PROPS);
if (doc.description) {
serialized.description = _lodash.default.truncate(doc.description, TRUNCATE_128);
}
if ("params" in doc && doc.params) {
serialized.params = serializeParams(((doc).params));
}
if ("returns" in doc && doc.returns) {
serialized.returns = serializeReturns(((doc).returns));
}
for (const linkProp of _const.LINK_PROPS) {
if (linkProp in doc && doc[linkProp]) {
serialized[linkProp] = serializeDocumentLinks(((doc)[linkProp]));
}
}
if (doc.members.length) {
serialized.members = new Array(doc.members.length);
for (let i = 0; i < doc.members.length; i++) {
(serialized.members)[i] = serializeTree(doc.members[i]);
}
}
return serialized;
}
function fromTree(documentTree) {
const manifest = {
version: LATEST_VERSION,
metadata: {},
root: documentTree,
registry: {}
};
return manifest;
}
function write(manifest, indent) {
return JSON.stringify({
version: manifest.version,
metadata: manifest.metadata,
root: serializeTree(manifest.root),
registry: manifest.registry
}, null, indent ? "\t" : "");
}