UNPKG

@altostra/core

Version:

Core library for shared types and logic

34 lines (33 loc) 1.58 kB
import type { Maybe } from "../../../common/Maybe"; import type { Dict } from "../../../common/Types"; import type { ExtraData, ExtraDataItem } from "../../Types"; export interface ExtraDataItemParser<T> { fromString?: (str: string) => Maybe<T>; fromArray?: (arr: string[]) => Maybe<T>; fromRecord?: (obj: Dict<Dict<string> | string>) => Maybe<T>; } export declare const DEFAULT_DOMAIN_KEY = ""; export interface ResourceDomains extends Dict<string> { [DEFAULT_DOMAIN_KEY]?: string; } export declare class ExtraDataHelper { #private; stackId?: string; changeSetId?: string; /** * A mapping from resource-id, to an object where all values are strings */ domains: Dict<ResourceDomains>; constructor({ stackId, changeSetId, domains, ...extraData }: ExtraData); get extraData(): ExtraData; get(key: string): Maybe<ExtraDataItem>; get<T>(key: string, parser: ExtraDataItemParser<T>): Maybe<T>; set(key: string, value: Maybe<ExtraDataItem>): void; } export declare function parseExtraDataItem<T>(item: Maybe<ExtraDataItem>, parser: ExtraDataItemParser<T>): Maybe<T>; export declare function asDomainsMetadata(item: Maybe<ExtraDataItem>): Maybe<Dict<ResourceDomains>>; export declare type ExtraDataUpdate = { [K in keyof ExtraData]: ExtraData[K] | null; }; export declare type ExtraDataItemMerger = (key: string, target: ExtraDataItem, source: ExtraDataItem) => Maybe<ExtraDataItem> | null; export declare function mergeExtraData(target: ExtraData, source: ExtraDataUpdate, itemMerger: ExtraDataItemMerger): ExtraData;