UNPKG

@altostra/core

Version:

Core library for shared types and logic

65 lines (64 loc) 3.65 kB
/// <reference types="node" /> import { inspect } from 'util'; import type { Connection } from "../Blueprint/Connection"; import type { Resource, ResourceType, ResourceTypesByType } from "../Blueprint/Resource"; import type { Maybe } from "../Common"; import { ParameterPathBuilder } from "../Parameters"; import type { Point } from "../Point"; import type { ResourceBase, ResourceByType } from "../Resources"; import type { ResourceId } from "../Resources/ResourceId"; import type { BlueprintHelper } from "./BlueprintHelper"; import { ResourceConnectionsCollection as ConnectionCollection } from "./ConnectionCollection"; import type { ConnectionHelper } from "./ConnectionHelper"; import type { Parameterized } from "./Parameters"; import type { ResourceUtilities } from "./ResourcesUtils"; /** * A ParameterizedResource<T> has non parameterized basic resource properties * and parameterized other properties */ export declare type ParameterizedResource<T extends Resource = Resource> = Parameterized<Omit<T, keyof ResourceBase>> & Pick<T, keyof ResourceBase>; export declare type ParameterizedResourceByType<T extends ResourceType = ResourceType> = ParameterizedResource<ResourceByType[T]>; export declare type ParameterizedResourceTemplate<T extends Resource = Resource> = Omit<ParameterizedResource<T>, 'id'> & Partial<Pick<ParameterizedResource<T>, 'id'>>; export declare type ParameterizedResourceTemplateByType<T extends ResourceType = ResourceType> = ParameterizedResourceTemplate<ResourceByType[T]>; export declare class ResourceHelper<T extends ResourceType = ResourceType> { #private; private readonly _blueprint; private _resource; constructor(_blueprint: BlueprintHelper, resCache: WeakMap<Resource, ResourceHelper>, connCache: WeakMap<Connection, ConnectionHelper>, _resource: ResourceByType[T]); get id(): ResourceId; get type(): T; get actualType(): ResourceType; get name(): string; get description(): Maybe<string>; set description(desc: Maybe<string>); get position(): Maybe<Point>; set position(position: Maybe<Point>); get resource(): ResourceTypesByType[T]; get rootPath(): ParameterPathBuilder; get incomingConnections(): ConnectionCollection; get outgoingConnections(): ConnectionCollection; get resourceUtils(): ResourceUtilities<T>; edit(resource: Partial<ResourceTypesByType[T]>): this; parameterizedEdit(resource: Partial<ParameterizedResourceByType<T>>): this; is<TType extends ResourceType>(...types: readonly [TType, ...TType[]]): this is ResourceHelperByType<TType>; getParameterizedResource(): ParameterizedResourceByType<T>; setParameterizedResource(resource: ParameterizedResourceByType<T>): ParameterizedResourceByType<T>; assertType<TType extends ResourceType>(...types: readonly [TType, ...TType[]]): asserts this is ResourceHelperByType<TType>; /** Replaces the current resource with the mapped resource * * If the mapped resource has the same Id as the current one, * then this `ResourceHelper` is rendered unusable and returns a new `ResourceHelper` * for the mapped resource */ mapResource<TResult extends ResourceType>(type: TResult, mapFn: (resource: ResourceTypesByType[T]) => Omit<ResourceTypesByType[TResult], 'type'>): ResourceHelper<TResult>; toJSON(): object; [inspect.custom](): unknown; dispose(): void; } /** * Transforms `T1 | T2` into `ResourceHelper<T1> | ResourceHelper<T2>` \ * Use instead of `ResourceHelper<T1 | T2>` */ export declare type ResourceHelperByType<TType extends ResourceType> = { [K in TType]: ResourceHelper<K>; }[TType];