UNPKG

swagger-typescript-api-nextgen

Version:
94 lines (79 loc) 2.27 kB
const _ = require("lodash"); const { parseSchema } = require("./schema"); const { config } = require("./config"); /** * @typedef {"schemas" | "examples" | "headers" | "parameters" | "requestBodies" | "responses" | "securitySchemes"} ComponentName * @typedef {object} RawTypeData * @typedef {{ type, typeIdentifier, name, description, content }} TypeData * * @typedef {{ * typeName: string; * componentName: ComponentName; * rawTypeData: RawTypeData; * typeData: TypeData | null; * }} TypeInfo */ /** * * @param {ComponentName} componentName * @param {string} typeName * @param {RawTypeData} rawTypeData * @returns {TypeInfo} */ const createComponent = (componentName, typeName, rawTypeData) => { const $ref = `#/components/${componentName}/${typeName}`; const componentSchema = { $ref, typeName, rawTypeData, componentName, typeData: null, }; const usageComponent = config.hooks.onCreateComponent(componentSchema) || componentSchema; config.componentsMap[$ref] = usageComponent; return usageComponent; }; /** * @returns {{ [key: string]: TypeInfo }} */ const createComponentsMap = (components) => { config.componentsMap = {}; _.each(components, (component, componentName) => _.each(component, (rawTypeData, typeName) => createComponent(componentName, typeName, rawTypeData), ), ); return config.componentsMap; }; /** * * @param {{ [key: string]: TypeInfo }} componentsMap * @param {ComponentName} componentName * @returns {TypeInfo[]} */ const filterComponentsMap = (componentsMap, componentName) => _.filter(componentsMap, (v, ref) => _.startsWith(ref, `#/components/${componentName}`)); /** * * @param {TypeInfo} typeInfo * @returns {TypeData} */ const getTypeData = (typeInfo) => { if (!typeInfo.typeData) { typeInfo.typeData = parseSchema(typeInfo.rawTypeData, typeInfo.typeName); } return typeInfo.typeData; }; /** * * @param {string} ref * @returns {TypeInfo | undefined} */ const getComponentByRef = (ref) => config.componentsMap[ref]; module.exports = { getTypeData, createComponent, createComponentsMap, filterComponentsMap, getComponentByRef, };