UNPKG

fortify-schema

Version:

TypeScript interface-like schema validation system that's easier to use than Zod

98 lines (94 loc) 3.13 kB
import { Documentation, DocumentationOptions, InteractiveDocumentation, InteractiveOptions } from "../../../../types/extension.type"; import { SchemaInterface } from "../../../../types/SchemaValidator.type"; import { OpenAPIConverter, OpenAPISpecification, OpenAPISpecOptions } from "../../mods"; import { TSGenerator , TypeScriptOptions as TSOptions} from "../../mods/typescript-generator"; import { DocumentationGenerator, InteractiveDocumentationGenerator } from "."; /** * Auto documentation utilities */ export const Docs = { /** * Generate comprehensive documentation from schema * * @example * ```typescript * const UserSchema = Interface({ * id: "uuid", * email: "email", * name: "string(2,50)", * age: "int(18,120)?", * role: Make.union("user", "admin", "moderator") * }); * * const documentation = Docs.generate(UserSchema, { * title: "User API", * description: "User management endpoints", * examples: true, * interactive: true * }); * * console.log(documentation.markdown); * console.log(documentation.html); * console.log(documentation.openapi); * ``` */ generate(schema: SchemaInterface, options: DocumentationOptions = {}): Documentation { return new DocumentationGenerator(schema, options).generate(); }, /** * Generate OpenAPI specification from schema * * @example * ```typescript * const openApiSpec = Docs.openapi(UserSchema, { * title: "User API", * version: "1.0.0", * servers: ["https://api.example.com"] * }); * ``` */ openapi(schema: SchemaInterface, options: OpenAPISpecOptions): OpenAPISpecification { return OpenAPIConverter.generateOpenAPISpec(schema, options); }, /** * Generate TypeScript type definitions * * @example * ```typescript * const typeDefinitions = Docs.typescript(UserSchema, { * exportName: "User", * namespace: "API" * }); * * // Generates: * // export interface User { * // id: string; * // email: string; * // name: string; * // age?: number; * // role: "user" | "admin" | "moderator"; * // } * ``` */ typescript(schema: SchemaInterface, options: TSOptions = {}): string { return TSGenerator.generateInterface(schema, options); }, /** * Generate interactive documentation with live examples * * @example * ```typescript * const interactiveDocs = Docs.interactive(UserSchema, { * title: "User Schema Playground", * theme: "dark", * showExamples: true, * allowTesting: true * }); * * document.body.innerHTML = interactiveDocs.html; * ``` */ interactive(schema: SchemaInterface, options: InteractiveOptions = {}): InteractiveDocumentation { return new InteractiveDocumentationGenerator(schema, options).generate(); } };