diff options
| author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-04-26 21:41:16 -0400 |
|---|---|---|
| committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-04-26 21:41:16 -0400 |
| commit | fca16fb81f470b43c72c1e24e530fdf66430dc7a (patch) | |
| tree | 329b62a67ed06cdf530d6982aee01a462adcabb1 /src/new_fields | |
| parent | eda4c4bb78d05ba857ce29ca8f7c463ce51b7609 (diff) | |
KVP stuff
Diffstat (limited to 'src/new_fields')
| -rw-r--r-- | src/new_fields/Doc.ts | 8 | ||||
| -rw-r--r-- | src/new_fields/Types.ts | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/new_fields/Doc.ts b/src/new_fields/Doc.ts index 6dfa37c1b..a1515fe49 100644 --- a/src/new_fields/Doc.ts +++ b/src/new_fields/Doc.ts @@ -34,6 +34,13 @@ export class ObjectField { readonly [Id] = ""; } +export function IsField(field: any): field is Field { + return (typeof field === "string") + || (typeof field === "number") + || (typeof field === "boolean") + || (field instanceof ObjectField) + || (field instanceof RefField); +} export type Field = number | string | boolean | ObjectField | RefField; export type Opt<T> = T | undefined; export type FieldWaiting<T extends RefField = RefField> = T extends undefined ? never : Promise<T | undefined>; @@ -48,6 +55,7 @@ export class Doc extends RefField { const doc = new Proxy<this>(this, { set: setter, get: getter, + ownKeys: target => Object.keys(target.__fields), deleteProperty: () => { throw new Error("Currently properties can't be deleted from documents, assign to undefined instead"); }, defineProperty: () => { throw new Error("Currently properties can't be defined on documents using Object.defineProperty"); }, }); diff --git a/src/new_fields/Types.ts b/src/new_fields/Types.ts index 649dfdc3e..4808d6e46 100644 --- a/src/new_fields/Types.ts +++ b/src/new_fields/Types.ts @@ -73,9 +73,9 @@ export function BoolCast(field: FieldResult, defaultVal: Opt<boolean> = undefine type WithoutList<T extends Field> = T extends List<infer R> ? R[] : T; -export function FieldValue<T extends Field, U extends WithoutList<T>>(field: Opt<T> | Promise<Opt<T>>, defaultValue: U): WithoutList<T>; -export function FieldValue<T extends Field>(field: Opt<T> | Promise<Opt<T>>): Opt<T>; -export function FieldValue<T extends Field>(field: Opt<T> | Promise<Opt<T>>, defaultValue?: T): Opt<T> { +export function FieldValue<T extends Field, U extends WithoutList<T>>(field: FieldResult<T>, defaultValue: U): WithoutList<T>; +export function FieldValue<T extends Field>(field: FieldResult<T>): Opt<T>; +export function FieldValue<T extends Field>(field: FieldResult<T>, defaultValue?: T): Opt<T> { return field instanceof Promise ? defaultValue : field; } |
