@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
TypeScript
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;