UNPKG

@webdoc/externalize

Version:

Links your documentation to external APIs and vice versa!

104 lines (99 loc) 2.98 kB
"use strict"; 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" : ""); }