@altostra/core
Version:
Core library for shared types and logic
65 lines (64 loc) • 3.65 kB
TypeScript
/// <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];