fortify-schema
Version:
TypeScript interface-like schema validation system that's easier to use than Zod
98 lines (94 loc) • 3.13 kB
text/typescript
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();
}
};