import type { Connection } from "../Blueprint/Connection";
import type { Resource, ResourceType } from "../Blueprint/Resource";
import type { Maybe, ResourceId } from "../Common";
import type { Point } from "../Point";
import type { RawResourceId, ResourceTemplate, ResourceTemplateByType } from "../Resources";
import type { BlueprintHelper } from "./BlueprintHelper";
import { Collection } from "./Collection";
import type { ConnectionHelper } from "./ConnectionHelper";
import type { It } from "./Iterable";
import type { ParameterizedResourceTemplate, ParameterizedResourceTemplateByType, ResourceHelperByType } from "./ResourceHelper";
import { ResourceHelper } from "./ResourceHelper";
export declare class ResourceCollection extends Collection<Resource, ResourceHelper, ResourceId> {
    private readonly _blueprint;
    constructor(resourcesCache: WeakMap<Resource, ResourceHelper>, connCache: WeakMap<Connection, ConnectionHelper>, _blueprint: BlueprintHelper);
    has(id: ResourceId): boolean;
    [Symbol.iterator](): Generator<ResourceHelper<ResourceType>, void, unknown>;
    addByType<T extends ResourceType>(type: T, resource: Omit<ResourceTemplateByType<T>, 'type'>, position?: Point): ResourceHelper<T>;
    add<TResource extends Resource>(resourceOrTemplate: Resource | ResourceTemplate<TResource>, position?: Point): ResourceHelper<TResource['type']>;
    addParameterizedResourceByType<T extends ResourceType>(type: T, resource: Omit<ParameterizedResourceTemplateByType<T>, 'type'>, position?: Point): ResourceHelper<T>;
    addParameterizedResource<TResource extends Resource>(resourceOrTemplate: ParameterizedResourceTemplate<TResource>, position?: Point): ResourceHelper<TResource['type']>;
    delete(resource: Maybe<ResourceHelper>): void;
    private _initCreatedId;
    deleteAll(): void;
    get(resourceId: RawResourceId): Maybe<ResourceHelper>;
    ofType<TType extends ResourceType>(...type: [TType, ...TType[]]): It<ResourceHelperByType<TType>>;
    assertType<TType extends ResourceType>(...validTypes: TType[]): It<ResourceHelperByType<TType>>;
}
export declare function ofResourceType<TType extends ResourceType>(...type: [TType, ...TType[]]): (src: Iterable<ResourceHelper>) => It<ResourceHelperByType<TType>>;
export declare function assertResourceType<TType extends ResourceType>(...validTypes: TType[]): (src: Iterable<ResourceHelper>) => It<ResourceHelperByType<TType>>;
