From 600b61bb27262ed8d529dd3e6f3a3fc7fdcbcf0a Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Sat, 24 Nov 2018 23:46:22 +0100 Subject: [PATCH] Added PD.For and PD.Normalize --- src/mol-state/action.ts | 10 ++-------- src/mol-state/transformer.ts | 10 ++-------- src/mol-util/param-definition.ts | 5 +++++ 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/mol-state/action.ts b/src/mol-state/action.ts index cd867b8e5..264a9266e 100644 --- a/src/mol-state/action.ts +++ b/src/mol-state/action.ts @@ -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> } diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts index 2c60fbacb..448272e76 100644 --- a/src/mol-state/transformer.ts +++ b/src/mol-state/transformer.ts @@ -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> } diff --git a/src/mol-util/param-definition.ts b/src/mol-util/param-definition.ts index f6cd42763..77848d8e7 100644 --- a/src/mol-util/param-definition.ts +++ b/src/mol-util/param-definition.ts @@ -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)) { -- GitLab