import { OpenReadSeekCloser, ReadSeekCloser, Resource as IResource, ResourceCopier, ResourceTransformation } from '../type';
import { MediaType } from '@pkg/media/type';
import { ResourcePaths } from '@internal/domain/resources';
import { ResourceMetadata } from '@internal/domain/resources';
import { Publisher } from './publisher';
export declare class ResourceHash {
    value: string;
    size: number;
    private resource;
    setup(resource: ResourceImpl): Promise<void>;
}
export declare class PublishOnce {
    private hasPublished;
    private publishPromise;
    do(publishFn: () => Promise<void>): Promise<void>;
}
export declare class ResourceImpl implements IResource, ResourceCopier {
    private h;
    private openReadSeekCloser;
    private _mediaType;
    private paths;
    private _data;
    private publisher;
    private publishOnce;
    constructor(openReadSeekCloser: OpenReadSeekCloser, mediaType: MediaType, paths: ResourcePaths, data?: Record<string, any>, publisher?: Publisher);
    name(): string;
    nameNormalized(): string;
    mediaType(): MediaType;
    resourceType(): string;
    relPermalink(): string;
    permalink(): string;
    private publish;
    private copyStreamToFile;
    targetPath(): string;
    data(): any;
    readSeekCloser(): Promise<ReadSeekCloser>;
    content(ctx?: any): Promise<any>;
    hash(): Promise<string>;
    size(): Promise<number>;
    cloneTo(targetPath: string): IResource;
    private clone;
    key(): string;
    get RelPermalink(): string;
    get Permalink(): string;
    get Name(): string;
    get MediaType(): MediaType;
    get ResourceType(): string;
    get TargetPath(): string;
    get Data(): any;
    get Content(): Promise<any>;
    get Hash(): () => Promise<string>;
    get Size(): () => Promise<number>;
    meta(): ResourceMetadata;
    mergeData(incoming: Record<string, any>): void;
    transform(...transformations: ResourceTransformation[]): Promise<IResource>;
    private createTransformedResource;
}
