import { PhpProgram, PhpStmt } from '../nodes/stmt'; import { PhpExpr } from '../nodes/expressions'; import { PhpArg } from '../nodes'; import { PhpName } from '../nodes/name'; import { PhpType } from '../nodes/types'; export interface PhpBuilderFactoryNamespaceIntent { readonly name: string; readonly docblock?: readonly string[]; } export type PhpBuilderFactoryUseKind = 'normal' | 'function' | 'const'; export interface PhpBuilderFactoryUseIntent { readonly name: string; readonly alias?: string | null; readonly kind?: PhpBuilderFactoryUseKind; } export interface PhpBuilderFactoryLiteralString { readonly kind: 'string'; readonly value: string; } export interface PhpBuilderFactoryLiteralInt { readonly kind: 'int'; readonly value: number; } export interface PhpBuilderFactoryLiteralFloat { readonly kind: 'float'; readonly value: number; } export interface PhpBuilderFactoryLiteralBool { readonly kind: 'bool'; readonly value: boolean; } export interface PhpBuilderFactoryLiteralNull { readonly kind: 'null'; } export type PhpBuilderFactoryLiteral = PhpBuilderFactoryLiteralString | PhpBuilderFactoryLiteralInt | PhpBuilderFactoryLiteralFloat | PhpBuilderFactoryLiteralBool | PhpBuilderFactoryLiteralNull; export interface PhpBuilderFactoryArgumentParameter { readonly kind: 'parameter'; readonly name: string; } export interface PhpBuilderFactoryArgumentLiteral { readonly kind: 'literal'; readonly literal: PhpBuilderFactoryLiteral; } export type PhpBuilderFactoryArgument = PhpBuilderFactoryArgumentParameter | PhpBuilderFactoryArgumentLiteral; export interface PhpBuilderFactoryMethodAssignPropertyStep { readonly kind: 'assignPropertyFromParameter'; readonly property: string; readonly parameter: string; } export interface PhpBuilderFactoryMethodReturnPropertyStep { readonly kind: 'returnProperty'; readonly property: string; } export interface PhpBuilderFactoryMethodReturnNewStep { readonly kind: 'returnNew'; readonly className: string; readonly arguments?: readonly PhpBuilderFactoryArgument[]; } export type PhpBuilderFactoryMethodStep = PhpBuilderFactoryMethodAssignPropertyStep | PhpBuilderFactoryMethodReturnPropertyStep | PhpBuilderFactoryMethodReturnNewStep; export interface PhpBuilderFactoryMethodIntent { readonly name: string; readonly visibility?: 'public' | 'protected' | 'private'; readonly isStatic?: boolean; readonly returnType?: string | null; readonly parameters?: readonly PhpBuilderFactoryParameterIntent[]; readonly docblock?: readonly string[]; readonly body?: readonly PhpBuilderFactoryMethodStep[]; } export interface PhpBuilderFactoryParameterIntent { readonly name: string; readonly type?: string | null; readonly default?: PhpBuilderFactoryLiteral; } export interface PhpBuilderFactoryPropertyIntent { readonly name: string; readonly visibility?: 'public' | 'protected' | 'private'; readonly type?: string | null; readonly default?: PhpBuilderFactoryLiteral; readonly isStatic?: boolean; readonly isReadonly?: boolean; readonly docblock?: readonly string[]; } export interface PhpBuilderFactoryClassIntent { readonly name: string; readonly docblock?: readonly string[]; readonly isFinal?: boolean; readonly isAbstract?: boolean; readonly extends?: string | null; readonly implements?: readonly string[]; readonly properties?: readonly PhpBuilderFactoryPropertyIntent[]; readonly methods?: readonly PhpBuilderFactoryMethodIntent[]; } export interface PhpBuilderFactoryFileIntent { readonly file: string; readonly namespace: PhpBuilderFactoryNamespaceIntent; readonly uses?: readonly PhpBuilderFactoryUseIntent[]; readonly class: PhpBuilderFactoryClassIntent; } export interface PhpBuilderFactoryIntent { readonly files: readonly PhpBuilderFactoryFileIntent[]; } export declare function isPhpBuilderFactoryIntentEmpty(intent: PhpBuilderFactoryIntent): boolean; export declare function serialisePhpBuilderFactoryIntent(intent: PhpBuilderFactoryIntent): string; export declare function derivePhpTypeFromString(type: string | null | undefined): PhpType | null; export declare function derivePhpNameFromString(name: string): PhpName; export declare function convertLiteralToExpression(literal: PhpBuilderFactoryLiteral): PhpExpr; export declare function convertBuilderIntentToArgument(argument: PhpBuilderFactoryArgument): PhpArg; export declare function expandMethodStepToStatements(step: PhpBuilderFactoryMethodStep): readonly PhpStmt[]; export declare function flattenMethodSteps(steps: readonly PhpBuilderFactoryMethodStep[] | undefined): readonly PhpStmt[]; export declare function assemblePhpProgramFromBuilderFactory(statements: readonly PhpStmt[]): PhpProgram;