import { Distribution } from 'aws-cdk-lib/aws-cloudfront';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { Construct } from 'constructs';
import { OptionalNextjsDistributionProps, OptionalNextjsDomainProps, OptionalNextjsImageProps, OptionalNextjsInvalidationProps, OptionalNextjsRevalidationProps, OptionalNextjsServerProps, OptionalNextjsStaticAssetsProps } from './generated-structs';
import { OptionalNextjsBuildProps } from './generated-structs/OptionalNextjsBuildProps';
import { NextjsBuild } from './NextjsBuild';
import { NextjsDistribution } from './NextjsDistribution';
import { NextjsDomain, NextjsDomainProps } from './NextjsDomain';
import { NextjsImage } from './NextjsImage';
import { NextjsOverrides } from './NextjsOverrides';
import { NextjsRevalidation } from './NextjsRevalidation';
import { NextjsServer } from './NextjsServer';
import { NextjsStaticAssets } from './NextjsStaticAssets';
export interface NextjsConstructOverrides {
    readonly nextjsBuildProps?: OptionalNextjsBuildProps;
    readonly nextjsStaticAssetsProps?: OptionalNextjsStaticAssetsProps;
    readonly nextjsServerProps?: OptionalNextjsServerProps;
    readonly nextjsImageProps?: OptionalNextjsImageProps;
    readonly nextjsRevalidationProps?: OptionalNextjsRevalidationProps;
    readonly nextjsDomainProps?: OptionalNextjsDomainProps;
    readonly nextjsDistributionProps?: OptionalNextjsDistributionProps;
    readonly nextjsInvalidationProps?: OptionalNextjsInvalidationProps;
}
export interface NextjsProps {
    /**
     * Optional value to prefix the Next.js site under a /prefix path on CloudFront.
     * Usually used when you deploy multiple Next.js sites on same domain using /sub-path
     *
     * Note, you'll need to set [basePath](https://nextjs.org/docs/app/api-reference/next-config-js/basePath)
     * in your `next.config.ts` to this value and ensure any files in `public`
     * folder have correct prefix.
     * @example "/my-base-path"
     */
    readonly basePath?: string;
    /**
     * Optional build command override value.
     * @default 'npx @opennextjs/aws@^3 build'
     */
    readonly buildCommand?: string;
    /**
     * The directory to execute `npm run build` from. By default, it is `nextjsPath`.
     * Can be overridden, particularly useful for monorepos where `build` is expected to run
     * at the root of the project.
     */
    readonly buildPath?: string;
    /**
     * Optional CloudFront Distribution created outside of this construct that will
     * be used to add Next.js behaviors and origins onto. Useful with `basePath`.
     */
    readonly distribution?: Distribution;
    /**
     * Props to configure {@link NextjsDomain}. See details on how to customize at
     * {@link NextjsDomainProps}
     */
    readonly domainProps?: NextjsDomainProps;
    /**
     * Custom environment variables to pass to the NextJS build **and** runtime.
     */
    readonly environment?: Record<string, string>;
    /**
     * Optional S3 Bucket to use, defaults to assets bucket
     */
    readonly imageOptimizationBucket?: s3.IBucket;
    /**
     * Relative path to the directory where the NextJS project is located.
     * Can be the root of your project (`.`) or a subdirectory (`packages/web`).
     */
    readonly nextjsPath: string;
    /**
     * Override props for every construct. Enables deep customization. Use with caution as
     * you can override all props. Recommend reviewing source code to see props
     * you'll be overriding before using.
     */
    readonly overrides?: NextjsOverrides;
    /**
     * Less build output.
     */
    readonly quiet?: boolean;
    /**
     * Skips running Next.js build. Useful if you want to deploy `Nextjs` but
     * haven't made any changes to Next.js app code.
     * @default false
     */
    readonly skipBuild?: boolean;
    /**
     * By default all CloudFront cache will be invalidated on deployment.
     * This can be set to true to skip the full cache invalidation, which
     * could be important for some users.
     */
    readonly skipFullInvalidation?: boolean;
    /**
     * Streaming allows you to send data to the client as it's generated
     * instead of waiting for the entire response to be generated.
     */
    readonly streaming?: boolean;
}
/**
 * The `Nextjs` construct is a higher level construct that makes it easy to create a NextJS app.
 *
 * Your standalone server application will be bundled using o(utput tracing and will be deployed to a Lambda function.
 * Static assets will be deployed to an S3 bucket and served via CloudFront.
 * You must use Next.js 10.3.0 or newer.
 *
 * Please provide a `nextjsPath` to the Next.js app inside your project.
 *
 * @example
 * new Nextjs(this, "Web", {
 *   nextjsPath: path.resolve("packages/web"),
 * })
 */
export declare class Nextjs extends Construct {
    protected props: NextjsProps;
    /**
     * The main NextJS server handler lambda function.
     */
    serverFunction: NextjsServer;
    /**
     * The image optimization handler lambda function.
     */
    imageOptimizationFunction: NextjsImage;
    /**
     * Built NextJS project output.
     */
    nextBuild: NextjsBuild;
    /**
     * Asset deployment to S3.
     */
    staticAssets: NextjsStaticAssets;
    /**
     * Optional Route53 Hosted Zone, ACM Certificate, and Route53 DNS Records
     */
    domain?: NextjsDomain;
    /**
     * CloudFront distribution.
     */
    distribution: NextjsDistribution;
    /**
     * Revalidation handler and queue.
     */
    revalidation: NextjsRevalidation;
    lambdaFunctionUrl: lambda.FunctionUrl;
    imageOptimizationLambdaFunctionUrl: lambda.FunctionUrl;
    constructor(scope: Construct, id: string, props: NextjsProps);
    /**
     * URL of Next.js App.
     */
    get url(): string;
    /**
     * Convenience method to access `Nextjs.staticAssets.bucket`.
     */
    get bucket(): s3.IBucket;
}
