import { Effect as E, Context } from "effect"
export namespace _typesTest {
export function a<K extends string>(name: K) {
return class CoA extends ViewModel.Component(name)<CoA, {}>() {};
}
}
export namespace ViewModel {
export const Component =
<const Id extends string>(id: Id) =>
<Self, Type extends E.Tag.AllowedType>(): ComponentClass<
Self,
Id,
Type & { _dev?: unknown }
> =>
Object.assign(E.Tag(id)<Self, Readonly<Type & { _dev?: unknown }>>(), {
getComponentMaybe: (entity: Record<string, any>) => entity[id],
getComponent: (entity: Record<Id, Type>) => entity[id],
key: id,
});
export type ComponentClass<
Self,
Id extends string,
Type extends E.Tag.AllowedType,
> = Context.TagClass<Self, Id, Type> & {
getComponentMaybe: (entity: Record<string, any>) => Type | undefined;
getComponent: (entity: Record<Id, Type>) => Type;
key: Id;
};
}
import { Effect as E, Context } from "effect"
export namespace _typesTest {
export function a<K extends string>(name: K) {
return class CoA extends ViewModel.Component(name)<CoA, {}>() {};
}
}
export namespace ViewModel {
export const Component =
<const Id extends string>(id: Id) =>
<Self, Type extends E.Tag.AllowedType>(): ComponentClass<
Self,
Id,
Type & { _dev?: unknown }
> =>
Object.assign(E.Tag(id)<Self, Readonly<Type & { _dev?: unknown }>>(), {
getComponentMaybe: (entity: Record<string, any>) => entity[id],
getComponent: (entity: Record<Id, Type>) => entity[id],
key: id,
});
export type ComponentClass<
Self,
Id extends string,
Type extends E.Tag.AllowedType,
> = Context.TagClass<Self, Id, Type> & {
getComponentMaybe: (entity: Record<string, any>) => Type | undefined;
getComponent: (entity: Record<Id, Type>) => Type;
key: Id;
};
}