import type { ProjectFile } from './types.js'; export declare const REACT_NATIVE_CATALOG = "node_modules/react-native/gradle/libs.versions.toml"; /** A build script of a Gradle plugin project (convention plugins), not of an app. */ export declare const GRADLE_PLUGIN_BUILD: RegExp; /** Applies the Android application plugin — a root `plugins { … apply false }` declaration only makes it available. */ export declare function appliesAndroidAppPlugin(text: string): boolean; /** Applies an Android library / test plugin and not the application plugin: its targetSdk is not the app's. */ export declare function appliesOnlyAndroidLibraryPlugin(text: string): boolean; /** `[versions]` entries of the scanned Gradle version catalogs (React Native's bundled catalog excluded unless asked). */ export declare function catalogVersions(files: ProjectFile[], includeReactNative?: boolean): Map; /** * The catalog of the build `file` belongs to: the deepest catalog whose build directory contains it, so a nested * build's (or the --path build's) own catalog wins over the repository root's. With no containing catalog, a sole * catalog is used. */ export declare function nearestCatalog(file: ProjectFile, catalogs: ProjectFile[]): ProjectFile | undefined; export type CatalogVersions = Map; /** Version catalogs visible to a Gradle file, by accessor (`libs`, `androidx`); null when declared but unreadable. */ export type CatalogResolver = (file: ProjectFile) => Map; /** * gradle.properties a module actually sees: the files on the path from its build's root (nearest settings * directory) down to the module, outside sample/demo trees. Files of other modules, other (included) builds, and * example apps are out of scope. A key with two different values in scope is null (unresolved). */ export type PropertyScope = (file: ProjectFile) => Map; /** `.versions.` looked up in the resolved catalogs; undefined when unknown. */ export declare function catalogValue(catalogs: Map, accessor: string, alias: string): { value: string; file: string; } | undefined; /** * Module directories whose manifests declare Wear OS, TV, Automotive OS, or XR. A module is TV-only when its main * manifest requires leanback (no phone can install any variant), or when it has a TV signal (leanback required in a * flavor, or a LEANBACK_LAUNCHER) and no phone launcher reaches it: not in any of its own * manifests (main or a product flavor — a phone flavor next to a TV flavor keeps the phone rule) and not in a library * module's manifest (merged into the app). Debug-only manifests are ignored: a debug launcher never ships. */ export declare function specializedAndroidModules(manifests: ProjectFile[], appModules: string[]): Set; /** * True when every ID is the main app's or `
.` (its extensions, widgets, and watch app). A nested ID * that has extensions of its own (`
.beta` next to `
.beta.Widgets`) is a separate app record, unless it is * a watch app (`
.watchkitapp.watchkitextension`). */ export declare function isOneAppWithExtensions(ids: string[]): boolean; export declare function detectProject(files: ProjectFile[], root: string): Promise<{ android: boolean; ios: boolean; androidPackageNames: string[]; androidPackageExpressions: { file: string; expression: string; }[]; iosBundleIds: string[]; iosBundleIdExpressions: { file: string; expression: string; }[]; androidAppModules: string[]; appGradleFiles: { text: string; absolute: string; relative: string; sample?: boolean; outside?: boolean; demo?: boolean; convention?: boolean; }[]; hasIosAppOutsideDemo: boolean; hasAppOutsideDemo: boolean; sampleAppGradleFiles: { text: string; absolute: string; relative: string; sample?: boolean; outside?: boolean; demo?: boolean; convention?: boolean; }[]; resolveCatalogs: CatalogResolver; properties: { scope: PropertyScope; ciOverrides: Set; settingsTexts: string[]; }; shippedOnly: boolean; manifests: ProjectFile[]; gradleFiles: ProjectFile[]; targetSdkEvidence: { file: string; value: number; }[]; }>;