Page MenuHomeSealhub

component-arguments.ts
No OneTemporary

component-arguments.ts

export type ExtractComponentArgumentValue<C> = C extends ComponentArgument<
infer T
>
? T
: never;
export type ExtractStructuredComponentArgumentsValues<C> = {
[property in keyof C]: ExtractComponentArgumentValue<C[property]>;
};
export abstract class ComponentArgument<ARG extends any> {
ARG!: ARG; // this is for some reason necessary to make the ExtractComponentArgumentValue work. It seems like this argument has to appear somewhere in the structure of the class to make it work. Possibly it can be made into some function argument or smth
abstract getTypeName(): string;
}
export class ShortText extends ComponentArgument<string> {
getTypeName() {
return "short-text";
}
}
export class MarkdownArgument extends ComponentArgument<string> {
getTypeName() {
return "markdown";
}
}
export class List<
T extends ComponentArgument<unknown>
> extends ComponentArgument<Array<ExtractComponentArgumentValue<T>>> {
constructor(public item_type: T) {
super();
}
getTypeName() {
return "list";
}
}
export class Structured<
T extends Record<string, ComponentArgument<unknown>>
> extends ComponentArgument<{
[property in keyof T]: ExtractComponentArgumentValue<T[property]>;
}> {
constructor(public structure: T) {
super();
}
getTypeName() {
return "structured";
}
}
export class Image extends ComponentArgument<string> {
constructor(public path_to_image_on_fs: string) {
super();
}
getTypeName() {
return "image";
}
}

File Metadata

Mime Type
text/plain
Expires
Wed, May 7, 19:46 (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
662445
Default Alt Text
component-arguments.ts (1 KB)

Event Timeline