UNPKG

@rxap/ts-morph

Version:

Provides utilities for manipulating TypeScript code using the ts-morph library. It offers a fluent API to add, modify, and remove code elements such as classes, decorators, imports, and properties in both Angular and NestJS projects. This package simplifi

83 lines (82 loc) 6.57 kB
import { ClassDeclaration, DecoratorStructure, MethodDeclaration, OptionalKind, ParameterDeclarationStructure, Project, SourceFile, StatementStructures, WriterFunction } from 'ts-morph'; import { DataProperty } from '../data-property'; import { OverwriteOptions } from '../overwrite-options'; import { TypeImport } from '../type-import'; import { NormalizedUpstreamOptions } from '../upstream-options'; import { CoerceDtoClassOutput } from './coerce-dto-class'; import { DtoClassProperty } from './dto-class-property'; export interface OperationParameter extends DataProperty { type?: string | WriterFunction | TypeImport; pipeList?: Array<string | WriterFunction | TypeImport>; defaultValue?: string | WriterFunction; hasQuestionToken?: boolean; required?: boolean; /** * (optional) the method parameter name. If not defined the name property will be used */ alias?: string; /** * true - the parameter is a parent parameter. * Example * @Controller('/user/:uuid') * ... * @Get('/profile') * * In this case the uuid parameter should not be added to the operation path. * */ fromParent?: boolean; } export interface OperationOptions { paramList?: OperationParameter[]; queryList?: OperationParameter[]; operationName: string; path?: string | null; returnType?: string | WriterFunction; isAsync?: boolean; method?: string; body?: string | WriterFunction | null; statements?: (string | WriterFunction | StatementStructures)[] | string | WriterFunction | null; decorators?: OptionalKind<DecoratorStructure>[]; } export interface CoerceOperationOptions extends OperationOptions { tsMorphTransform?: (project: Project, sourceFile: SourceFile, classDeclaration: ClassDeclaration, controllerName: string, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => Partial<OperationOptions> | void; overwrite?: OverwriteOptions; controllerPath?: string; /** * true - the control path is overwritten with */ overwriteControllerPath?: boolean; context?: string | null; coerceUpstreamOperationImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation; buildUpstreamGetParametersImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation<string | WriterFunction>; buildDtoReturnImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation; builtDtoDataMapperImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation<string | WriterFunction>; buildUpstreamGetDataImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation<void>; buildGetDataImplementation?: (classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions & any>) => TransformOperation<void>; coerceOperationDtoClass?: (classDeclaration: ClassDeclaration, controllerName: string, moduleSourceFile: SourceFile, options: Readonly<CoerceOperationOptions & any>) => CoerceDtoClassOutput | null; buildOperationDtoClassName?: (controllerName: string, options: Readonly<Pick<CoerceOperationOptions, 'dtoClassNameSuffix' | 'dtoClassName'>>) => string; upstream?: NormalizedUpstreamOptions | null; propertyList?: DtoClassProperty[]; isArray?: boolean; isReturnVoid?: boolean; dtoClassNameSuffix?: string; dtoClassName?: string; } export declare function CoerceUpstreamBasicOperationImplementation(classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, upstream: NormalizedUpstreamOptions): { className: string; memberName: string; }; export declare function BuildOperationDtoClassName(controllerName: string, options: Readonly<Pick<CoerceOperationOptions, 'dtoClassNameSuffix' | 'dtoClassName'>>): string; export declare function CoerceOperationDtoClass(classDeclaration: ClassDeclaration, controllerName: string, moduleSourceFile: SourceFile, options: Readonly<CoerceOperationOptions>): CoerceDtoClassOutput | null; export type TransformOperation<T = void> = (operationOptions: OperationOptions) => T; export declare function BuiltDtoDataMapperImplementation(classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions>): TransformOperation<string | WriterFunction>; export declare function BuildDtoReturnImplementation(classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions>): TransformOperation; export declare function BuildUpstreamGetDataImplementation(classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions>): TransformOperation; export declare function CoerceUpstreamDefaultOperationImplementation(classDeclaration: ClassDeclaration, moduleSourceFile: SourceFile, dto: CoerceDtoClassOutput | null, options: Readonly<CoerceOperationOptions>): TransformOperation; export declare function BuildMethodQueryParameters(queryList: OperationParameter[], sourceFile: SourceFile): Array<OptionalKind<ParameterDeclarationStructure>>; export declare function BuildMethodParamParameters(paramList: OperationParameter[], sourceFile: SourceFile): Array<OptionalKind<ParameterDeclarationStructure>>; export declare function BuildMethodBodyParameters(body: string | WriterFunction | undefined | null): Array<OptionalKind<ParameterDeclarationStructure>>; export declare function CoerceApiQueryDecorators(queryList: OperationParameter[], methodDeclaration: MethodDeclaration): void; export declare function CoerceOperationParamList(paramList: OperationParameter[], classDeclaration: ClassDeclaration): void; export declare function CoerceNestOperation(sourceFile: SourceFile, options: CoerceOperationOptions, moduleSourceFile?: SourceFile): MethodDeclaration;