Implement reply

This commit is contained in:
Chi Vinh Le
2018-09-06 00:06:58 +02:00
parent ee30003390
commit 110becb075
26 changed files with 2076 additions and 84 deletions
@@ -12,7 +12,7 @@ export class FakeStorage implements PymStorage {
return Promise.resolve();
}
public getItem(key: string) {
return Promise.resolve(this.store[key]);
return Promise.resolve(this.store[key] || null);
}
}
@@ -1,12 +1,42 @@
import { ComponentType } from "react";
/** Remove all traces of `$fragmentRefs` and `$refType` from type recursively */
/** Remove `$fragmentRefs` and `$refType` on a single object */
export type OmitFragments<T> = Pick<
T,
{
[P in keyof T]: P extends " $fragmentRefs" | " $refType" ? never : P
}[keyof T]
>;
export type NoFragmentRefs<T> = T extends object
? {
[P in Exclude<keyof T, " $fragmentRefs" | " $refType">]: NoFragmentRefs<
T[P]
>
}
? T extends ((...args: any[]) => any)
? T
: T extends ReadonlyArray<infer U>
? ReadonlyArray<NoFragmentRefs2<U>> // TODO: (cvle) this should normally reference itself but it complains about a circular reference.
: { [P in keyof OmitFragments<T>]: NoFragmentRefs<T[P]> }
: T;
// TODO: (cvle) these NoFragmentRefX are a workaround for above issue
export type NoFragmentRefs2<T> = T extends object
? T extends ((...args: any[]) => any)
? T
: T extends ReadonlyArray<infer U>
? ReadonlyArray<NoFragmentRefs3<U>>
: { [P in keyof OmitFragments<T>]: NoFragmentRefs<T[P]> }
: T;
export type NoFragmentRefs3<T> = T extends object
? T extends ((...args: any[]) => any)
? T
: T extends ReadonlyArray<infer U>
? ReadonlyArray<NoFragmentRefs4<U>>
: { [P in keyof OmitFragments<T>]: NoFragmentRefs<T[P]> }
: T;
export type NoFragmentRefs4<T> = T extends object
? T extends ((...args: any[]) => any)
? T
: { [P in keyof OmitFragments<T>]: NoFragmentRefs<T[P]> }
: T;
export default function removeFragmentRefs<T>(