Skip to content
Snippets Groups Projects
Commit 600b61bb authored by David Sehnal's avatar David Sehnal
Browse files

Added PD.For and PD.Normalize

parent 1e62dbcc
No related branches found
No related tags found
No related merge requests found
......@@ -78,21 +78,15 @@ namespace StateAction {
}
export namespace Builder {
type ParamDefinition<P> = { [K in keyof P]-?: PD.Base<P[K]> }
export interface Type<A extends StateObject.Ctor, P extends { }> {
from?: A | A[],
params?: ParamDefinition<P> | ((a: StateObject.From<A>, globalCtx: any) => ParamDefinition<P>)
params?: PD.For<P> | ((a: StateObject.From<A>, globalCtx: any) => PD.For<P>)
}
export interface Root {
<A extends StateObject.Ctor, P extends { }>(info: Type<A, P>): Define<StateObject.From<A>, Params<P>>
<A extends StateObject.Ctor, P extends { }>(info: Type<A, P>): Define<StateObject.From<A>, PD.Normalize<P>>
}
type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
type Params<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
export interface Define<A extends StateObject, P> {
<T>(def: DefinitionBase<A, T, P>): StateAction<A, T, P>
}
......
......@@ -147,23 +147,17 @@ export namespace Transformer {
}
export namespace Builder {
type ParamDefinition<P> = { [K in keyof P]-?: PD.Base<P[K]> }
export interface Type<A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }> {
name: string,
from: A | A[],
to: B | B[],
params?: ParamDefinition<P> | ((a: StateObject.From<A>, globalCtx: any) => ParamDefinition<P>)
params?: PD.For<P> | ((a: StateObject.From<A>, globalCtx: any) => PD.For<P>)
}
export interface Root {
<A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }>(info: Type<A, B, P>): Define<StateObject.From<A>, StateObject.From<B>, Params<P>>
<A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }>(info: Type<A, B, P>): Define<StateObject.From<A>, StateObject.From<B>, PD.Normalize<P>>
}
type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
type Params<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
export interface Define<A extends StateObject, B extends StateObject, P> {
(def: DefinitionBase<A, B, P>): Transformer<A, B, P>
}
......
......@@ -181,6 +181,11 @@ export namespace ParamDefinition {
export type Params = { [k: string]: Any }
export type Values<T extends Params> = { [k in keyof T]: T[k]['defaultValue'] }
type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
export type Normalize<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
export type For<P> = { [K in keyof P]-?: Base<P[K]> }
export function getDefaultValues<T extends Params>(params: T) {
const d: { [k: string]: any } = {}
for (const k of Object.keys(params)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment