counterfact
Version:
a library for building a fake REST API for testing
42 lines (41 loc) • 1.47 kB
JavaScript
import nodePath from "node:path";
import { SchemaTypeCoder } from "./schema-type-coder.js";
import { TypeCoder } from "./type-coder.js";
export class ParametersTypeCoder extends TypeCoder {
constructor(requirement, placement) {
super(requirement);
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;
return `"${name}"${optionalFlag}: ${new SchemaTypeCoder(schema).write(script)}`;
});
if (typeDefinitions.length === 0) {
return "never";
}
return `{${typeDefinitions.join(", ")}}`;
}
modulePath() {
const pathString = this.requirement.url
.split("/")
.at(-2)
.replaceAll("~1", "/");
return `${nodePath
.join("parameters", pathString)
.replaceAll("\\", "/")}.types.ts`;
}
}