@ng-openapi/http-resource
Version:
HTTP Resource plugin for ng-openapi - Angular HTTP utilities with caching and state management
156 lines (149 loc) • 4.83 kB
TypeScript
import { ScriptTarget, ModuleKind, Project } from 'ts-morph';
import { Info, ExternalDocs, Path, ParameterType, XML, BodyParameter, QueryParameter, Security, Tag } from 'swagger-schema-official';
interface SwaggerResponse {
description?: string;
content?: Record<string, {
schema?: any;
}>;
}
interface SwaggerDefinition {
type?: ParameterType | undefined;
format?: string | undefined;
title?: string | undefined;
description?: string | undefined;
default?: any;
multipleOf?: number | undefined;
maximum?: number | undefined;
exclusiveMaximum?: boolean | undefined;
minimum?: number | undefined;
exclusiveMinimum?: boolean | undefined;
maxLength?: number | undefined;
minLength?: number | undefined;
pattern?: string | undefined;
maxItems?: number | undefined;
minItems?: number | undefined;
uniqueItems?: boolean | undefined;
maxProperties?: number | undefined;
minProperties?: number | undefined;
enum?: any[] | undefined;
items?: SwaggerDefinition | SwaggerDefinition[] | undefined;
$ref?: string | undefined;
allOf?: SwaggerDefinition[] | undefined;
additionalProperties?: SwaggerDefinition | boolean | undefined;
properties?: {
[propertyName: string]: SwaggerDefinition;
} | undefined;
discriminator?: string | undefined;
readOnly?: boolean | undefined;
nullable?: boolean | undefined;
xml?: XML | undefined;
externalDocs?: ExternalDocs | undefined;
example?: any;
required?: string[] | undefined;
oneOf?: SwaggerDefinition[];
anyOf?: SwaggerDefinition[];
}
interface SwaggerSpec {
openapi: string;
swagger: string;
info: Info;
externalDocs?: ExternalDocs | undefined;
host?: string | undefined;
basePath?: string | undefined;
schemes?: string[] | undefined;
consumes?: string[] | undefined;
produces?: string[] | undefined;
paths: {
[pathName: string]: Path;
};
definitions?: {
[definitionsName: string]: SwaggerDefinition;
} | undefined;
parameters?: {
[parameterName: string]: BodyParameter | QueryParameter;
} | undefined;
responses?: {
[responseName: string]: SwaggerResponse;
} | undefined;
security?: Array<{
[securityDefinitionName: string]: string[];
}> | undefined;
securityDefinitions?: {
[securityDefinitionName: string]: Security;
} | undefined;
tags?: Tag[] | undefined;
components?: {
schemas?: Record<string, SwaggerDefinition>;
};
}
declare class SwaggerParser {
private readonly spec;
private constructor();
static create(swaggerPathOrUrl: string, config: GeneratorConfig): Promise<SwaggerParser>;
private static loadContent;
private static fetchUrlContent;
private static parseSpecContent;
private static detectFormat;
getDefinitions(): Record<string, SwaggerDefinition>;
getDefinition(name: string): SwaggerDefinition | undefined;
resolveReference(ref: string): SwaggerDefinition | undefined;
getAllDefinitionNames(): string[];
getSpec(): SwaggerSpec;
getPaths(): Record<string, any>;
isValidSpec(): boolean;
getSpecVersion(): {
type: "swagger" | "openapi";
version: string;
} | null;
}
/**
* Interface for generator instances
*/
interface IPluginGenerator {
/**
* Generate code files
*/
generate(outputRoot: string): Promise<void>;
}
interface GeneratorConfig {
input: string;
output: string;
clientName?: string;
validateInput?: (spec: SwaggerSpec) => boolean;
options: {
dateType: "string" | "Date";
enumStyle: "enum" | "union";
validation?: {
response?: boolean;
};
generateServices?: boolean;
generateEnumBasedOnDescription?: boolean;
customHeaders?: Record<string, string>;
responseTypeMapping?: {
[contentType: string]: "json" | "blob" | "arraybuffer" | "text";
};
customizeMethodName?: (operationId: string) => string;
};
compilerOptions?: {
declaration?: boolean;
target?: ScriptTarget;
module?: ModuleKind;
strict?: boolean;
};
plugins?: (new (...args: any) => IPluginGenerator)[];
}
declare class HttpResourceGenerator implements IPluginGenerator {
private project;
private parser;
private spec;
private config;
private methodGenerator;
private indexGenerator;
constructor(parser: SwaggerParser, project: Project, config: GeneratorConfig);
generate(outputRoot: string): Promise<void>;
private groupPathsByController;
private generateServiceFile;
private addImports;
private addServiceClass;
}
export { HttpResourceGenerator as HttpResourcePlugin };