import { Entry } from '@shockpkg/archive-files';
export interface IRceditOptionsVersionStrings {
    [key: string]: string;
}
export interface IRceditOptions {
    /**
     * Icon path.
     *
     * @default null
     */
    iconPath?: string | null;
    /**
     * File version.
     *
     * @default null
     */
    fileVersion?: string | null;
    /**
     * Product version.
     *
     * @default null
     */
    productVersion?: string | null;
    /**
     * Version strings.
     *
     * @default null
     */
    versionStrings?: IRceditOptionsVersionStrings | null;
}
/**
 * Default value if value is undefined.
 *
 * @param value Value.
 * @param defaultValue Default value.
 * @returns Value or the default value if undefined.
 */
export declare function defaultValue<T, U>(value: T, defaultValue: U): Exclude<T | U, undefined>;
/**
 * Default null if value is undefined.
 *
 * @param value Value.
 * @returns Value or null if undefined.
 */
export declare function defaultNull<T>(value: T): Exclude<T, undefined> | null;
/**
 * Default false if value is undefined.
 *
 * @param value Value.
 * @returns Value or false if undefined.
 */
export declare function defaultFalse<T>(value: T): boolean | Exclude<T, undefined>;
/**
 * Default true if value is undefined.
 *
 * @param value Value.
 * @returns Value or true if undefined.
 */
export declare function defaultTrue<T>(value: T): boolean | Exclude<T, undefined>;
/**
 * Check if Archive Entry is empty resource fork.
 *
 * @param entry Archive Entry.
 * @returns Is empty resource fork.
 */
export declare function entryIsEmptyResourceFork(entry: Entry): boolean;
/**
 * Find path relative from base, if base matches.
 *
 * @param path Path to match against.
 * @param start Search start.
 * @param nocase Match case-insensitive.
 * @returns Returns path, or null.
 */
export declare function pathRelativeBase(path: string, start: string, nocase?: boolean): string | null;
/**
 * Same as pathRelativeBase, but retuns true on a match, else false.
 *
 * @param path Path to match against.
 * @param start Search start.
 * @param nocase Match case-insensitive.
 * @returns Returns true on match, else false.
 */
export declare function pathRelativeBaseMatch(path: string, start: string, nocase?: boolean): boolean;
/**
 * Trim a file extenion.
 *
 * @param path File path.
 * @param ext File extension.
 * @param nocase Match case-insensitive.
 * @returns Path without file extension.
 */
export declare function trimExtension(path: string, ext: string, nocase?: boolean): string;
/**
 * Encode string for XML.
 *
 * @param value String value.
 * @returns Escaped string.
 */
export declare function xmlEntitiesEncode(value: string): string;
/**
 * Decode string for XML.
 *
 * @param value Encoded value.
 * @returns Decoded string.
 */
export declare function xmlEntitiesDecode(value: string): string;
/**
 * Encode string into plist string tag.
 *
 * @param value String value.
 * @returns Plist string.
 */
export declare function plistStringTagEncode(value: string): string;
/**
 * Decode string from plist string tag.
 *
 * @param xml XML tag.
 * @returns Plain string, or null.
 */
export declare function plistStringTagDecode(xml: string): string | null;
/**
 * A small utility function for replacing Info.plist values.
 *
 * @param xml XML string.
 * @param key Plist dict key.
 * @param value Plist dict value, XML tag.
 * @returns Updated document.
 */
export declare function infoPlistReplace(xml: string, key: string, value: string): string;
/**
 * A small utility function for reading Info.plist values.
 *
 * @param xml XML string.
 * @param key Plist dict key.
 * @returns XML tag.
 */
export declare function infoPlistRead(xml: string, key: string): string | null;
/**
 * Uses rcedit to edit the resources of a Windows EXE.
 * Requires either Windows or wine in the path.
 *
 * @param path File path.
 * @param options Options object.
 */
export declare function rcedit(path: string, options: IRceditOptions): Promise<void>;
