UNPKG

counterfact

Version:

Generate a TypeScript-based mock server from an OpenAPI spec in seconds — with stateful routes, hot reload, and REPL support.

45 lines (44 loc) 1.71 kB
import { pathJoin } from "../util/forward-slash-path.js"; import { buildJsDoc } from "./jsdoc.js"; import { SchemaTypeCoder } from "./schema-type-coder.js"; import { TypeCoder } from "./type-coder.js"; export class ParametersTypeCoder extends TypeCoder { placement; constructor(requirement, version = "", placement = "") { super(requirement, version); this.placement = placement; } names() { return super.names("parameters"); } writeCode(script) { const typeDefinitions = (this.requirement?.data ?? []) .map((_, index) => { return this.requirement.get(index); }) .filter((parameter) => parameter.get("in").data === this.placement) .map((parameter) => { const name = parameter.get("name")?.data; const required = parameter.get("required")?.data; const optionalFlag = required ? "" : "?"; const schema = parameter.has("schema") ? parameter.get("schema") : parameter; const comment = buildJsDoc(parameter.data); const commentPrefix = comment ? `\n${comment}` : ""; const typeString = new SchemaTypeCoder(schema, this.version).write(script); return `${commentPrefix}"${name}"${optionalFlag}: ${typeString}`; }); if (typeDefinitions.length === 0) { return "never"; } return `{${typeDefinitions.join(", ")}}`; } modulePath() { const pathString = this.requirement.url .split("/") .at(-2) .replaceAll("~1", "/"); return `${pathJoin("parameters", pathString)}.types.ts`; } }