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