/**
 * @public
 */
export declare interface ArchiveContentEntry {
    content: Record<string, any>;
}

/**
 * @public
 */
export declare type ArchiveEntry = ArchiveFileEntry | ArchiveContentEntry;

/**
 * @public
 */
export declare interface ArchiveFileEntry {
    filePath: string;
}

/**
 * @public
 */
export declare interface ArchiveJsonContentEntry extends ArchiveContentEntry {
    patch?: JsonContentPatch;
}

/**
 * @public
 */
export declare type ArchiveJsonEntry = ArchiveJsonContentEntry | ArchiveJsonFileEntry;

/**
 * @public
 */
export declare interface ArchiveJsonFileEntry extends ArchiveFileEntry {
    patch?: JsonContentPatch;
}

/**
 * @public
 */
export declare interface ArchiveLangFileEntry extends ArchiveFileEntry {
    patch?: JsonContentPatch;
}

/**
 * @public
 */
export declare type ArchiveMap = Map<string, ArchiveEntry>;

/**
 * @public
 */
export declare type ArchivePatchableEntry = ArchiveJsonContentEntry | ArchiveLangFileEntry | ArchiveJsonFileEntry;

/**
 * @public
 */
export declare interface BaseBuildOptions {
    modules: {
        resource: string[];
        collection: string[];
    };
    compatible: boolean;
}

/**
 * @public
 */
export declare interface BaseModuleManifest {
    name: string;
    description: string;
    author: string[];
    incompatibleWith?: string[];
}

/**
 * @public
 */
export declare interface BedrockBuildOptions extends BaseBuildOptions {
    platform: 'bedrock';
    type: 'normal';
}

/**
 * @public
 */
export declare class BedrockOptionValidator {
    #private;
    constructor(options: BedrockBuildOptions);
    validateOptions(): boolean;
}

/**
 * @public
 */
export declare class BedrockPackBuilder extends PackBuilder {
    #private;
    build(options: BedrockBuildOptions): Promise<Buffer>;
}

/**
 * @public
 */
export declare interface BedrockTextureFile {
    texture_data: Record<string, unknown>;
}

/**
 * @public
 */
export declare interface CollectionModule {
    path: string;
    manifest: CollectionModuleManifest;
}

/**
 * @public
 */
export declare interface CollectionModuleManifest extends BaseModuleManifest {
    type: 'collection';
    contains?: string[];
}

/**
 * @public
 */
export declare const COMPATIBLE_FILENAME_CONFIG: {
    'assets/minecraft/lang/zh_meme\\.(.+)': string;
};

/**
 *
 * @param selectedModules - modules to be processed.
 * @returns
 * @public
 */
export declare function generateArchiveEntries(selectedModules: ResourceModule[]): Promise<ArchiveMap>;

/**
 *
 * @param textureFileName - output file name
 * @param selectedModules - generate file from these modules
 * @returns
 * @public
 */
export declare function generateBedrockTextureFile(textureFileName: string, selectedModules: ResourceModule[]): Promise<BedrockTextureFile>;

/**
 * @public
 */
export declare function generateJsonModification(selectedModules: ResourceModule[]): Promise<JsonModification>;

/**
 * @public
 */
export declare const JAVA_LEGACY_FORMAT_VERSION = 3;

/**
 * @public
 */
export declare interface JavaBuildOptions extends BaseBuildOptions {
    platform: 'java';
    type: 'normal' | 'legacy';
    format: number;
    mod: string[];
}

/**
 * @public
 */
export declare class JavaOptionValidator {
    #private;
    constructor(options: JavaBuildOptions);
    validateOptions(): boolean;
}

/**
 * @public
 */
export declare class JavaPackBuilder extends PackBuilder {
    #private;
    constructor(parsedModules: ResourceModule[], priorityFilePath: string, legacyMappingFilePath: string);
    build(options: JavaBuildOptions): Promise<Buffer>;
}

/**
 * @public
 */
export declare type JsonAdditionPatch = Map<string, string>;

/**
 * @public
 */
export declare interface JsonContentPatch {
    flatKey?: JsonFlatKeyPatch;
    nestedKey?: JsonNestedKeyPatch;
}

/**
 * @public
 */
export declare type JsonDeletionPatch = Set<string>;

/**
 * @public
 */
export declare type JsonFlatAdditionMap = Map<string, JsonAdditionPatch>;

/**
 * @public
 */
export declare type JsonFlatDeletionMap = Map<string, JsonDeletionPatch>;

/**
 * @public
 */
export declare interface JsonFlatKeyPatch {
    addition?: JsonAdditionPatch;
    deletion?: JsonDeletionPatch;
}

/**
 * @public
 */
export declare interface JsonModification {
    addition: JsonFlatAdditionMap;
    deletion: JsonFlatDeletionMap;
}

/**
 * @public
 */
export declare interface JsonNestedKeyPatch {
    addition?: Map<string, any>;
    deletion?: JsonDeletionPatch;
}

/**
 * @public
 */
export declare class JsonPatch {
    static applyJsonContentPatch(content: Record<string, any>, patch: JsonContentPatch): Record<string, any>;
    static applyJsonFilePatch(filePath: string, patch: JsonContentPatch): Promise<Record<string, any>>;
    static applyJsonFlatKeyPatch(content: Record<string, any>, patch: JsonFlatKeyPatch): Record<string, any>;
    static applyJsonNestedKeyPatch(content: Record<string, any>, patch: JsonNestedKeyPatch): Record<string, any>;
}

/**
 * @public
 */
export declare interface JsonPatchDefinition {
    file: string;
    add?: string;
    remove?: string;
}

/**
 * @public
 */
export declare class LangFileConverter {
    static parseJavaLang(rawContent: string): any;
    static dumpJavaLang(obj: PureJson): string;
    static parseBedrockLang(rawContent: string): any;
    static dumpBedrockLang(obj: PureJson): string;
}

/**
 * @public
 */
export declare interface LanguageModificationDefinition {
    file: string;
    add?: string;
    remove?: string;
}

/**
 * @public
 */
export declare const LEGACY_FILE_CONTENT_CONFIG: {
    'assets/minecraft/lang/zh_cn.lang': {
        requireLegacyMapping: boolean;
    };
};

/**
 * @public
 */
export declare const LEGACY_FILENAME_CONFIG: {
    'assets/minecraft/lang/zh_meme\\.(.+)': string;
    'assets/minecraft/lang/zh_cn\\.(.+)': string;
    'assets/minecraft/textures/block/(.+)': string;
    'assets/minecraft/textures/item/(.+)': string;
};

/**
 * @public
 */
export declare type MemeModule = ResourceModule | CollectionModule;

/**
 * @public
 */
export declare type MemeModuleManifest = ResourceModuleManifest | CollectionModuleManifest;

/**
 * @public
 */
export declare const MODULE_MANIFEST_FILENAME = "module_manifest.json";

/**
 * @public
 */
export declare class ModuleParser {
    #private;
    addSearchPaths(...paths: string[]): void;
    searchModules(): Promise<MemeModule[]>;
}

/**
 * @public
 */
export declare class PackBuilder {
    #private;
    parsedModules: MemeModule[];
    priorityFilePath: string;
    entries: ArchiveMap;
    constructor(parsedModules: MemeModule[], priorityFilePath: string);
    get selectedModules(): ResourceModule[];
    protected sortModules(): Promise<void>;
    getPackEntries(): Promise<ArchiveMap>;
    static getPackHash(content: Buffer): string;
    decideSelectedModules(options: BaseBuildOptions): ResourceModule[];
}

/**
 * @public
 */
export declare type PureJson = Record<string, string>;

/**
 * @public
 */
export declare interface ResourceModule {
    path: string;
    manifest: ResourceModuleManifest;
    files: string[];
}

/**
 * @public
 */
export declare interface ResourceModuleManifest extends BaseModuleManifest {
    type: 'resource';
    languageModification?: JsonPatchDefinition[];
}

/**
 * @public
 */
export declare interface TransformOptions {
    compatible: boolean;
    format: number;
}

export { }
