import { ChildProcess, StdioOptions } from 'node:child_process';
import { BaseProject } from './base/classes/base-project';
export declare namespace UtilsNpm {
    export const isProperVersion: (npmVersion: string) => boolean;
    export const isSpecialVersion: (version: string) => boolean;
    export const clearVersion: (version: string, options: {
        removePrefixes?: boolean;
        /**
         * Remove alpha, beta, rc, latest, next etc.
         */
        removeSuffix?: boolean;
    }) => string;
    export const fixMajorVerNumber: (version: string) => string;
    type LatestType = 'major' | 'minor' | 'patch' | {
        majorUpTo?: number;
        minorUpTo?: number;
    };
    export const getLatestVersionFromNpm: (packageName: string, options?: {
        currentPackageVersion?: string;
        latestType?: LatestType;
        skipAlphaBetaNext?: boolean;
    }) => Promise<string>;
    export const checkIfPackageVersionAvailable: (pkgName: string, pkgVersion: string) => Promise<boolean>;
    export const getLastMajorVersions: (pkgName: string) => Promise<string[]>;
    export const getLastMinorVersionsForMajor: (majorVer: number, pkgName: string) => Promise<string[]>;
    export interface VersionObjectNpm {
        major: number;
        minor: number;
        patch: number;
    }
    export const getVerObj: (version: string) => VersionObjectNpm;
    /**
     * @deprecated TODO remvoe
     */
    export const getLastVersions: (pkgName: string, currentVerObj: VersionObjectNpm, latestVerObj: VersionObjectNpm) => Promise<string[]>;
    export {};
}
export declare namespace UtilsHttp {
    const startHttpServer: (cwd: string, port: number, options?: {
        startMessage?: string;
    }) => Promise<void>;
}
export declare namespace UtilsMd {
    /**
     * extract assets pathes from .md file
     */
    const getAssets: (mdfileContent: string) => string[];
    const getAssetsFromFile: (absPathToFile: string) => string[];
    /**
     * Extract links to other Markdown files from a given Markdown content.
     * @param mdfileContent
     */
    const getLinksToOtherMdFiles: (mdfileContent: string) => string[];
    const moveAssetsPathsToLevelFromFile: (absFilePath: string, level?: number) => string | undefined;
    /**
     * Move asset paths to a higher directory level by adding "../" before each path.
     *
     * @param mdfileContent - The content of the .md file.
     * @param level - The number of levels to go up (default is 1).
     * @returns The modified content with updated asset paths.
     */
    const moveAssetsPathsToLevel: (mdfileContent: string, level?: number) => string;
}
export declare namespace UtilsQuickFixes {
    /**
     *
     * @param node_modules/sql.js/dist/sql-wasm.js
     */
    const replaceKnownFaultyCode: (contentofSQLWasmJS: string) => string;
    /**
     * for some reason electron is being bundled - and it is not needed for cli
     */
    const replaceElectronWithNothing: (jsContent: string, packageName: string) => string;
}
export declare namespace UtilsZipBrowser {
    const zipDirBrowser: (fileList: FileList) => Promise<Blob>;
    const unzipArchiveBrowser: (zipBlob: Blob) => Promise<Map<string, Blob>>;
}
export declare namespace UtilsZip {
    const splitFile7Zip: (inputPath: string, partSizeMB?: number) => Promise<number>;
    /**
     * Splits a file into smaller parts if its size exceeds the specified part size.
     * @returns true if file was split, false if not needed
     */
    const splitFile: (inputPath: string, partSizeMB?: number) => Promise<number>;
    /**
     * @returns absolute path to zip file
     */
    const zipDir: (absPathToDir: string, options?: {
        /**
         * default false
         */
        overrideIfZipFileExists?: boolean;
    }) => Promise<string>;
    const unzipArchive: (absPathToZip: string) => Promise<void>;
}
export declare namespace UtilsTaonWorker {
    const getUniqueForTask: (task: string, location: string | string[]) => string;
}
export declare namespace UtilsJava {
    const selectJdkVersion: () => Promise<string | undefined>;
    const detectJavaVersionMacOS: (javaHome: string) => string;
    const updateJavaHomePath: (selectedPath: string) => void;
    const selectTomcatVersion: () => Promise<string>;
    const updateTomcatHomePath: (selectedPath: string) => void;
}
export declare namespace UtilsPasswords {
    const hashPassword: (password: string) => Promise<string>;
    const verifyPassword: (password: string, stored: string) => Promise<boolean>;
}
export declare namespace UtilsDocker {
    const DOCKER_LABEL_KEY = "com.docker.compose.project";
    const DOCKER_TAON_PROJECT_LABEL = "com.docker.compose.taon.project=true";
    const cleanImagesAndContainersByDockerLabel: (labelKey: string, labelValue: string) => Promise<void>;
    interface DockerComposeActionOptions {
        composeFileName?: string;
        cwd?: string;
        env?: NodeJS.ProcessEnv;
        skipBuild?: boolean;
        stdio?: StdioOptions;
        useFirstYmlFound?: boolean;
    }
    type DockerComposeActionType = 'up' | 'down';
    /**
     * @returns cmd + args array
     * you can use with child_process.spawn
     * const [cmd, ...args] = getDockerComposeActionCommand('up');
     * child.spawn(cmd, args, { ... });
     *
     * @param action 'up' | 'down'
     */
    const getDockerComposeActionCommand: (action: DockerComposeActionType, options?: Omit<DockerComposeActionOptions, "cwd" | "env" | "stdio" | "useFirstYmlFound">) => string[];
    const getDockerComposeActionChildProcess: (action: DockerComposeActionType, options?: DockerComposeActionOptions) => ChildProcess;
    const removeAllTaonContainersAndImagesFromDocker: () => Promise<void>;
    /**
     * @TODO @REFACTOR use async stuff
     */
    const linkPodmanAsDockerIfNecessary: () => Promise<void>;
}
/**
 * ! TODO @IN_PROGRESS @LAST
 */
export declare namespace UtilsFileSync {
    interface FoldersSyncOptions {
        androidFolder: string;
        macPhotosLibrary: string;
        tempConvertFolder: string;
        /**
         * If true, skips the terminal menu confirmation on startup
         * (default: false) - perfect for automated scripts
         */
        skipTerminalMenu?: boolean;
        /**
         * for testing purposes only
         */
        onlyProcessFiles?: string[];
    }
    export const forFolders: (folder: FoldersSyncOptions) => Promise<void>;
    export {};
}
export declare namespace UtilsClipboard {
    const copyText: (textToCopy: string) => Promise<void>;
    const pasteText: () => Promise<string>;
}
export declare namespace UtilsLineCount {
    const forPorject: (project: BaseProject, opt: {
        extensionsOnly?: string[];
        displayInfoChildren?: boolean;
        displayInfoAll?: boolean;
        /**
         * by default src, libraries, projects
         */
        searchFolders?: string[];
    }) => {};
}
