/** * Copyright (c) Microsoft Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const fs = require('fs'); const path = require('path'); const { parseMd, applyTemplates } = require('../parse_md'); const mdBuilder = require('./MDBuilder'); const PROJECT_DIR = path.join(__dirname, '..', '..'); { const apiBody = parseMd(fs.readFileSync(path.join(PROJECT_DIR, 'docs-src', 'api-body.md')).toString()); const apiParams = parseMd(fs.readFileSync(path.join(PROJECT_DIR, 'docs-src', 'api-params.md')).toString()); const api = applyTemplates(apiBody, apiParams); const { documentation } = mdBuilder(api, false); const result = serialize(documentation); console.log(JSON.stringify(result)); } function serialize(documentation) { const result = {}; for (const clazz of documentation.classesArray) result[clazz.name] = serializeClass(clazz); return result; } function serializeClass(clazz) { const result = { name: clazz.name }; if (clazz.extends) result.extends = clazz.extends; if (clazz.comment) result.comment = clazz.comment; result.methods = {}; result.events = {}; result.properties = {}; for (const member of clazz.membersArray) { let map; if (member.kind === 'event') { map = result.events; } else if (member.kind === 'method') { map = result.methods; } else if (member.kind === 'property') { map = result.properties; } else { throw new Error('Unexpected member kind: ' + member.kind + ' ' + member.name + ' ' + member.type); } map[member.name] = serializeMember(member); } return result; } function serializeMember(member) { const result = { ...member }; sanitize(result); result.args = {}; for (const arg of member.argsArray) result.args[arg.name] = serializeProperty(arg); if (member.type) result.type = serializeType(member.type) return result; } function serializeProperty(arg) { const result = { ...arg }; sanitize(result); if (arg.type) result.type = serializeType(arg.type) return result; } function sanitize(result) { delete result.kind; delete result.args; delete result.argsArray; delete result.templates; if (result.properties && !Object.keys(result.properties).length) delete result.properties; if (result.comment === '') delete result.comment; if (result.returnComment === '') delete result.returnComment; } function serializeType(type) { const result = { ...type }; if (type.properties && type.properties.length) { result.properties = {}; for (const prop of type.properties) result.properties[prop.name] = serializeProperty(prop); } else { delete result.properties; } return result; }