import * as Generator from '@postxl/generator';
import { WithActions } from '../backend-actions';
import { WithBackendAuthentication } from '../backend-authentication';
import { WithBackend } from '../backend-core';
import { WithRepositories } from '../backend-repositories';
import { WithUpdates } from '../backend-update';
import { WithView } from '../backend-view';
import { WithBase } from '../base';
import { WithDecoders } from '../decoders';
import { WithTypes } from '../types';
type ContextRequirements = WithBackendAuthentication<WithUpdates<WithView<WithRepositories<WithActions<WithDecoders<WithTypes<WithBackend<WithBase<Generator.Context>>>>>>>>>;
export type ContextResult = WithTrpcRouter<ContextRequirements>;
export type ModelContextResult = Generator.InferModelContext<ContextResult>;
export type WithTrpcRouter<Context> = Generator.ExtendContextAndModel<Context, {
    trpcRouter: TrpcRouterContext;
}, {
    trpcRoute: TrpcRouterModelContext;
}>;
export type TrpcRouterContext = {
    packageVersions: {
        /**
         * The version tag of TRPC used in the project (used for package.json, e.g. "11.5.0")
         */
        trpc: string;
        /**
         * The version tag of SuperJSON used in the project (used for package.json, e.g. "1.13.1")
         */
        superJSON: string;
    };
    module: Generator.ImportableClass;
    /**
     * NestJS provider for the TRPC plugin that registers the server with NestJS/Fastify
     */
    plugin: Generator.ImportableClass & {
        _filePath: Generator.FilePath;
    };
    /**
     * The routes of the app routes. Mainly used inside the TRPC plugin.
     */
    appRoutes: Generator.ImportableConstant & {
        /**
         * The type of the app routes - needs to be used in by the TRPC client
         */
        type: Generator.ImportableType;
        _filePath: Generator.FilePath;
    };
    /**
     * Audit log route for querying action operations
     */
    auditLogRoute: Generator.ImportableFunction & {
        _filePath: Generator.FilePath;
    };
    defaultMethodNames: {
        create: Generator.FunctionName;
        update: Generator.FunctionName;
        delete: Generator.FunctionName;
    };
    /**
     * File that configures/provides all relevant TRPC elements: router, middleware, procedure
     */
    _shared: {
        _filePath: Generator.FilePath;
        /**
         * The router function, used to define the individual model routes
         */
        router: Generator.ImportableFunction;
        /**
         * The procedure function, used to compose the route endpoints
         */
        procedure: Generator.ImportableFunction;
        /**
         * The middleware function, used to define composable middleware
         */
        middleware: Generator.ImportableFunction;
        /**
         * The context for any endpoint before any middleware.
         * **Important**: This does only include the optional viewer!
         *                Use `_middleware.auth.context` to access the user!
         */
        context: Generator.ImportableType;
    };
    /**
     * Middleware that can be used in any route
     */
    _middleware: {
        /**
         * Auth middleware that ensure user is authenticated
         */
        auth: Generator.ImportableFunction & {
            context: Generator.ImportableType;
        };
        /**
         * Helpful function to log the request and response
         */
        debugLogger: Generator.ImportableFunction;
        _filePath: Generator.FilePath;
    };
};
export type TrpcRouterModelContext = Generator.ImportableFunction & {
    _filePath: Generator.FilePath;
    get: Generator.ImportableFunction;
    getMap: Generator.ImportableFunction;
    getList: Generator.ImportableFunction;
    getFiltered: Generator.ImportableFunction;
    getFilterOptions: Generator.ImportableFunction;
};
export type RouterEnumContext = Generator.ImportableFunction;
export declare const generatorId: string & import("zod").$brand<"PXL.GeneratorInterfaceId">;
export declare const generator: Generator.GeneratorInterface;
export {};
