import { Token } from '..';
/**
 * An Amazon Resource Name (ARN).
 * http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
 */
export declare class Arn extends Token {
    /**
     * Creates an ARN from components.
     * If any component is the empty string,
     * an empty string will be inserted into the generated ARN
     * at the location that component corresponds to.
     */
    static fromComponents(components: ArnComponents): Arn;
    /**
     * Given an ARN, parses it and returns components.
     *
     * The ARN it will be parsed and validated. The separator (`sep`) will be
     * set to '/' if the 6th component includes a '/', in which case, `resource`
     * will be set to the value before the '/' and `resourceName` will be the
     * rest. In case there is no '/', `resource` will be set to the 6th
     * components and `resourceName` will be set to the rest of the string.
     *
     * @returns an ArnComponents object which allows access to the various
     *          components of the ARN.
     */
    static parse(arn: string): ArnComponents;
    /**
     * Given a Token evaluating to ARN, parses it and returns components.
     *
     * The ARN cannot be validated, since we don't have the actual value yet
     * at the time of this function call. You will have to know the separator
     * and the type of ARN.
     *
     * The resulting `ArnComponents` object will contain tokens for the
     * subexpressions of the ARN, not string literals.
     *
     * WARNING: this function cannot properly parse the complete final
     * resourceName (path) out of ARNs that use '/' to both separate the
     * 'resource' from the 'resourceName' AND to subdivide the resourceName
     * further. For example, in S3 ARNs:
     *
     *      arn:aws:s3:::my_corporate_bucket/path/to/exampleobject.png
     *
     * After parsing the resourceName will not contain 'path/to/exampleobject.png'
     * but simply 'path'. This is a limitation because there is no slicing
     * functionality in CloudFormation templates.
     *
     * @param arn The input token that contains an ARN
     * @param sep The separator used to separate resource from resourceName
     * @param hasName Whether there is a name component in the ARN at all.
     * For example, SNS Topics ARNs have the 'resource' component contain the
     * topic name, and no 'resourceName' component.
     * @returns an ArnComponents object which allows access to the various
     * components of the ARN.
     */
    static parseToken(arn: Token, sep?: string, hasName?: boolean): ArnComponents;
}
export interface ArnComponents {
    /**
     * The partition that the resource is in. For standard AWS regions, the
     * partition is aws. If you have resources in other partitions, the
     * partition is aws-partitionname. For example, the partition for resources
     * in the China (Beijing) region is aws-cn.
     *
     * @default The AWS partition the stack is deployed to.
     */
    partition?: any;
    /**
     * The service namespace that identifies the AWS product (for example,
     * 's3', 'iam', 'codepipline').
     */
    service: any;
    /**
     * The region the resource resides in. Note that the ARNs for some resources
     * do not require a region, so this component might be omitted.
     *
     * @default The region the stack is deployed to.
     */
    region?: any;
    /**
     * The ID of the AWS account that owns the resource, without the hyphens.
     * For example, 123456789012. Note that the ARNs for some resources don't
     * require an account number, so this component might be omitted.
     *
     * @default The account the stack is deployed to.
     */
    account?: any;
    /**
     * Resource type (e.g. "table", "autoScalingGroup", "certificate").
     * For some resource types, e.g. S3 buckets, this field defines the bucket name.
     */
    resource: any;
    /**
     * Separator between resource type and the resource.
     *
     * Can be either '/' or ':'. Will only be used if path is defined.
     * @default '/'
     */
    sep?: string;
    /**
     * Resource name or path within the resource (i.e. S3 bucket object key) or
     * a wildcard such as ``"*"``. This is service-dependent.
     */
    resourceName?: any;
}
