import { Gms2ResourceType } from './components/Gms2ResourceArray.js';
import type { StitchProject } from './StitchProject.js';
export type ClobberAction = 'error' | 'skip' | 'overwrite';
export interface StitchMergerOptions {
    /**
     * List of source folder patterns that, if matched,
     * should have all child assets imported (recursive).
     * Will be passed to `new RegExp()` and tested against
     * the parent folder of every source resource.
     * Independent from ifNameMatches.
     */
    ifFolderMatches?: string[];
    /**
     * List of source resource name patterns that, if matched,
     * should have all child assets imported (recursive).
     * Will be passed to `new RegExp()` and tested against
     * the name of every source resource.
     * Independent from ifFolderMatches.
     */
    ifNameMatches?: string[];
    /**
     * By default, Included Files are also tested against
     * the merge patterns. Files can be excluded from merging.
     */
    skipIncludedFiles?: boolean;
    /**
     * Resource types whitelist. If not provided, all resource
     * types are merged.
     */
    types?: Gms2ResourceType[];
    /**
     * Normally all dependencies (parent objects and sprites)
     * for the objects within the modules must also be in those
     * modules (modules don't have to be self-contained, but the
     * collection of imported modules does.) You can bypass
     * that requirement.
     */
    skipDependencyCheck?: boolean;
    /**
     * If the target project already has the source module,
     * it may have assets in it that are *not* in the source.
     * This can create confusion about which assets come from
     * which source. You can reduce this confusion by having
     * conflicting target assets moved into a 'MERGE_CONFLICTS'
     * folder for later re-organization.
     */
    moveConflicting?: boolean;
    /**
     * If source assets match target assets by name,
     * but have mismatched parent folders, an error is raised.
     * This is to prevent
     * accidental overwrite of assets that happen to have the
     * same name but aren't actually the same thing.
     * You can change the behavior to instead skip importing
     * those assets (keeping the target version) or overwrite
     * (deleting the target version and keeping the source
     * version). Note that assets of different type that have
     * the same name will *always* raise an error.
     */
    onClobber?: ClobberAction;
}
export interface Gms2GitHubRepoInfo {
    repoOwner: string;
    repoName: string;
    revision?: string;
    revisionType?: '@' | '?';
    tagPattern?: string;
}
export interface Gms2MergerGitHubOptions extends StitchMergerOptions, Gms2GitHubRepoInfo {
}
export declare class Gms2ProjectMerger {
    private sourceProject;
    private targetProject;
    private options;
    constructor(sourceProject: StitchProject, targetProject: StitchProject, options?: StitchMergerOptions);
    merge(): Promise<void>;
    private resourcesMatch;
    private assertAllDependenciesFound;
    private resourceMatchesOptions;
    /**
     * Move any target module assets into a folder called "MERGE_CONFLICTS"
     * if they do not exist in the source module (if desired).
     */
    private handleResourceConflict;
    private importResource;
    private importIncludedFiles;
    private cloneResourceFiles;
}
//# sourceMappingURL=StitchProjectMerger.d.ts.map