import StandaloneBuildFlags from './StandaloneBuildFlags';
declare type StandaloneContextDataType = 'user' | 'service';
declare type StandaloneContextTestEnvironment = 'none' | 'local' | 'ci';
declare type OverridenPackagesToInstallWhenEjecting = Record<string, string>;
export declare function isStandaloneContextDataUser(value: any): value is StandaloneContextDataUser;
export declare function isStandaloneContextTestEnvironment(value: string): value is StandaloneContextTestEnvironment;
export declare function isStandaloneContextDataService(value: any): value is StandaloneContextDataService;
/**
 *  A user context is used when we are configuring a standalone app locally on a user's machine,
 *  such as during `exp detach`.
 */
export declare type StandaloneContextDataUser = {
    projectPath: string;
    exp: any;
};
/**
 *  A service context is used when we are generating a standalone app remotely on an Expo
 *  service machine, such as during `exp build`.
 */
export declare type StandaloneContextDataService = {
    expoSourcePath: string;
    archivePath: string | null;
    manifest: any;
    privateConfig: any;
    testEnvironment: StandaloneContextTestEnvironment;
    shellAppSdkVersion: string;
    packagesToInstallWhenEjecting: OverridenPackagesToInstallWhenEjecting | null;
};
declare class StandaloneContext {
    data?: StandaloneContextDataUser | StandaloneContextDataService;
    config: any;
    static createUserContext: (projectPath: string, exp: any, publishedUrl?: string | undefined) => StandaloneContextUser;
    static createServiceContext: (expoSourcePath: string, archivePath: string | null, manifest: any, privateConfig: any, testEnvironment: StandaloneContextTestEnvironment, build: StandaloneBuildFlags, publishedUrl: string, releaseChannel: string, shellAppSdkVersion: string, packagesToInstallWhenEjecting: Record<string, string> | null) => StandaloneContextService;
    /**
     *  On iOS we begin configuring standalone apps before we have any information about the
     *  project's manifest. By default let's treat all contexts as non-anonymous and override
     *  it in contexts that needs this to be different.
     */
    isAnonymous(): boolean;
}
export declare class StandaloneContextUser extends StandaloneContext {
    data: StandaloneContextDataUser;
    published: {
        url?: string;
        releaseChannel: 'default';
    };
    build: StandaloneBuildFlags;
    type: StandaloneContextDataType;
    constructor(data: StandaloneContextDataUser, published: {
        url?: string;
        releaseChannel: 'default';
    }, build: StandaloneBuildFlags);
}
export declare class StandaloneContextService extends StandaloneContext {
    data: StandaloneContextDataService;
    published: {
        url: string;
        releaseChannel: string;
    };
    build: StandaloneBuildFlags;
    type: StandaloneContextDataType;
    constructor(data: StandaloneContextDataService, published: {
        url: string;
        releaseChannel: string;
    }, build: StandaloneBuildFlags);
    /**
     *  On iOS we begin configuring standalone apps before we have any information about the
     *  project's manifest.
     */
    isAnonymous(): boolean;
}
export declare type AnyStandaloneContext = StandaloneContextUser | StandaloneContextService;
export default StandaloneContext;
