UNPKG

oazapfts

Version:

OpenApi TypeScript client generator

362 lines (314 loc) 11.6 kB
import { AsyncSeriesBailHook } from 'tapable'; import { AsyncSeriesHook } from 'tapable'; import { AsyncSeriesWaterfallHook } from 'tapable'; import { CustomHeaders } from '@oazapfts/runtime'; import { default as default_2 } from 'typescript'; import { InterfaceDeclaration } from 'typescript'; import { OpenAPIV3 } from 'openapi-types'; import { OpenAPIV3_1 } from 'openapi-types'; import { Statement } from 'typescript'; import { SyncWaterfallHook } from 'tapable'; import { TypeAliasDeclaration } from 'typescript'; import { TypeReferenceNode } from 'typescript'; declare type ArgumentStyle = (typeof argumentStyleOptions)[number]; declare const argumentStyleOptions: readonly ["positional", "object"]; export declare function createContext(inputSpec: Document_2, opts?: OazapftsContext["opts"]): OazapftsContext; export declare type DefaultImport = [string, { from: string; }]; declare type DefaultImport_2 = [string, { from: string; }]; export declare type Defaults = { baseUrl?: string; headers?: CustomHeaders; FormData?: default_2.ClassExpression | default_2.Identifier; fetch?: default_2.FunctionExpression | default_2.ArrowFunction | default_2.Identifier; }; declare type Defaults_2 = { baseUrl?: string; headers?: CustomHeaders; FormData?: default_2.ClassExpression | default_2.Identifier; fetch?: default_2.FunctionExpression | default_2.ArrowFunction | default_2.Identifier; }; declare type Document_2 = OpenAPIV3.Document | OpenAPIV3_1.Document; declare type Document_2_2 = OpenAPIV3.Document | OpenAPIV3_1.Document; declare type EnumStyle = (typeof enumStyleOptions)[number]; declare const enumStyleOptions: readonly ["union", "enum", "as-const"]; declare type HttpMethod = (typeof HttpMethods)[number]; declare const HttpMethods: readonly ["GET", "PUT", "POST", "DELETE", "OPTIONS", "HEAD", "PATCH", "TRACE"]; export declare type Import = string | ImportsWithoutDefault | DefaultImport | ImportWithDefault | NamespaceImport; declare type Import_2 = string | ImportsWithoutDefault_2 | DefaultImport_2 | ImportWithDefault_2 | NamespaceImport_2; export declare type ImportSpecifier = { name: string; as?: string; }; declare type ImportSpecifier_2 = { name: string; as?: string; }; export declare type ImportsWithoutDefault = [ (ImportSpecifier | string)[], { from: string; } ]; declare type ImportsWithoutDefault_2 = [ (ImportSpecifier_2 | string)[], { from: string; } ]; export declare type ImportWithDefault = [ string, (ImportSpecifier | string)[], { from: string; } ]; declare type ImportWithDefault_2 = [ string, (ImportSpecifier_2 | string)[], { from: string; } ]; export declare type NamespaceImport = [{ namespace: string; }, { from: string; }]; declare type NamespaceImport_2 = [{ namespace: string; }, { from: string; }]; export declare type OazapftsContext = { readonly opts: ReadonlyDeep<OazapftsOptions>; readonly spec: Document_2; readonly mode?: OnlyMode; /** Banner comment at the top of the file (the text content, not including comment markers) */ banner: string; /** Import declarations (AST nodes) */ imports: Import[]; /** Runtime defaults (baseUrl, etc.) - will be generated as `export const defaults = { ... }` */ defaults: Defaults; /** Server definitions - will be generated as `export const servers = { ... }` */ servers: ServerObject_2[]; /** Initialization statements (e.g., `const oazapfts = Oazapfts.runtime(defaults)`) */ init: Statement[]; discriminatingSchemas: Set<SchemaObject_2>; aliases: (TypeAliasDeclaration | InterfaceDeclaration)[]; enumAliases: Statement[]; enumRefs: Record<string, { values: string; type: TypeReferenceNode; }>; refs: Record<string, { base: TypeReferenceNode; readOnly?: TypeReferenceNode; writeOnly?: TypeReferenceNode; }>; refsOnlyMode: Map<string, OnlyModes>; typeAliases: Record<string, number>; operationNames: Map<string, number>; }; declare type OazapftsContext_2 = { readonly opts: ReadonlyDeep_2<OazapftsOptions>; readonly spec: Document_2_2; readonly mode?: OnlyMode_2; /** Banner comment at the top of the file (the text content, not including comment markers) */ banner: string; /** Import declarations (AST nodes) */ imports: Import_2[]; /** Runtime defaults (baseUrl, etc.) - will be generated as `export const defaults = { ... }` */ defaults: Defaults_2; /** Server definitions - will be generated as `export const servers = { ... }` */ servers: ServerObject[]; /** Initialization statements (e.g., `const oazapfts = Oazapfts.runtime(defaults)`) */ init: Statement[]; discriminatingSchemas: Set<SchemaObject>; aliases: (TypeAliasDeclaration | InterfaceDeclaration)[]; enumAliases: Statement[]; enumRefs: Record<string, { values: string; type: TypeReferenceNode; }>; refs: Record<string, { base: TypeReferenceNode; readOnly?: TypeReferenceNode; writeOnly?: TypeReferenceNode; }>; refsOnlyMode: Map<string, OnlyModes_2>; typeAliases: Record<string, number>; operationNames: Map<string, number>; }; declare type OazapftsOptions = { include?: string[]; exclude?: string[]; optimistic?: boolean; unionUndefined?: boolean; /** * @deprecated Use `enumStyle: "enum"` instead. */ useEnumType?: boolean; /** * Controls how enums are generated in TypeScript. * Takes precedence over `useEnumType` if both are specified. */ enumStyle?: EnumStyle; mergeReadWriteOnly?: boolean; useUnknown?: boolean; argumentStyle?: ArgumentStyle; allSchemas?: boolean; /** * When true, serialize boolean query parameters as 1/0. */ numericBooleanQueryParameters?: boolean; /** * When true, skip generating deprecated legacy method aliases for backward * compatibility. Only the primary normalized operationId-based names will * be generated. */ futureStripLegacyMethods?: boolean; /** * Plugins to apply during code generation. * Each plugin receives hooks and can tap into generation steps. */ UNSTABLE_plugins?: UNSTABLE_OazapftsPlugin[]; }; export declare type OnlyMode = "readOnly" | "writeOnly"; declare type OnlyMode_2 = "readOnly" | "writeOnly"; export declare type OnlyModes = Record<OnlyMode, boolean>; declare type OnlyModes_2 = Record<OnlyMode_2, boolean>; declare namespace OpenAPI { { SchemaObject, UNSTABLE_DiscriminatingSchemaObject, ReferenceObject, ParameterObject, Document_2 as Document, DiscriminatorObject, ResponseObject, ResponsesObject, RequestBodyObject, MediaTypeObject, OperationObject, PathsObject, PathItemObject, ServerObject } } export declare type ReadonlyDeep<T> = { readonly [P in keyof T]: ReadonlyDeep<T[P]>; }; declare type ReadonlyDeep_2<T> = { readonly [P in keyof T]: ReadonlyDeep_2<T[P]>; }; declare type SchemaObject = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject | boolean; declare type SchemaObject_2 = OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject | boolean; declare type ServerObject = OpenAPIV3.ServerObject | OpenAPIV3_1.ServerObject; declare type ServerObject_2 = OpenAPIV3.ServerObject | OpenAPIV3_1.ServerObject; declare type UNSTABLE_ComposeSourceHookArgs = [OazapftsContext_2, default_2.Statement[]]; declare type UNSTABLE_EndpointHookArgs = [ { method: HttpMethod; path: string; operation: OpenAPI.OperationObject; pathItem: OpenAPI.PathItemObject; }, OazapftsContext_2 ]; declare enum UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE { EAGER = "eager", DEFAULT = "default", LAZY = "lazy" } declare type UNSTABLE_OazapftsPlugin = UNSTABLE_OazapftsPluginFn & UNSTABLE_OazapftsPluginOptions; /** * A plugin initiator function that receives hooks and can tap into them. */ declare type UNSTABLE_OazapftsPluginFn = (hooks: UNSTABLE_OazapftsPluginHooks) => void | Promise<void>; declare type UNSTABLE_OazapftsPluginHooks = { /** * Called after context is created with all template parts initialized. * Use this to modify the spec, context, or template parts. * This is the only hook where ctx.spec is mutable. */ prepare: AsyncSeriesHook<[OazapftsContext_2]>; /** * Decide whether a given endpoint should be generated. * Receives the current decision (default true) as first argument. * Return false to skip endpoint generation. */ filterEndpoint: SyncWaterfallHook<[ boolean, { method: HttpMethod; path: string; operation: OpenAPI.OperationObject; pathItem: OpenAPI.PathItemObject; }, OazapftsContext_2 ]>; /** * Generate client methods for an endpoint. * This is a bail hook: the first plugin that returns a value wins. * Return `undefined` to delegate to later plugins. */ generateMethod: AsyncSeriesBailHook<UNSTABLE_EndpointHookArgs, default_2.Statement[] | undefined>; /** * Refine client methods for an endpoint. * Receives generated methods and can return a modified array. * Runs after generateMethod for each endpoint. */ refineMethod: AsyncSeriesWaterfallHook<[ default_2.Statement[], ...UNSTABLE_EndpointHookArgs ]>; /** * Compose top-level source statements from context and generated methods. * This is a bail hook: the first plugin that returns a value wins. * Return `undefined` to delegate to later plugins. */ composeSource: AsyncSeriesBailHook<UNSTABLE_ComposeSourceHookArgs, default_2.Statement[] | undefined>; /** * Refine top-level source statements before SourceFile construction. * Receives composed statements and can return a modified array. * Runs after composeSource. */ refineSource: AsyncSeriesWaterfallHook<[ default_2.Statement[], ...UNSTABLE_ComposeSourceHookArgs ]>; /** * Customize query serializer call arguments for each formatter call. * Default behavior is identity (returns the original args unchanged). */ querySerializerArgs: SyncWaterfallHook<UNSTABLE_QuerySerializerHookArgs>; /** * Called after the full AST has been generated, before printing to string. * Use this to add/modify/remove statements from the final source file. */ astGenerated: AsyncSeriesWaterfallHook<[default_2.SourceFile, OazapftsContext_2]>; }; declare type UNSTABLE_OazapftsPluginOptions = { name?: string; version?: string; precedence?: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE; }; declare type UNSTABLE_QuerySerializerHookArgs = [ default_2.Expression[], { method: HttpMethod; path: string; operation: OpenAPI.OperationObject; pathItem: OpenAPI.PathItemObject; formatter: string; parameters: OpenAPI.ParameterObject[]; query: OpenAPI.ParameterObject[]; }, OazapftsContext_2 ]; export declare function withMode(ctx: OazapftsContext, mode?: OnlyMode): OazapftsContext; export { }