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