aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-04-26 21:41:16 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-04-26 21:41:16 -0400
commitfca16fb81f470b43c72c1e24e530fdf66430dc7a (patch)
tree329b62a67ed06cdf530d6982aee01a462adcabb1 /src/new_fields
parenteda4c4bb78d05ba857ce29ca8f7c463ce51b7609 (diff)
KVP stuff
Diffstat (limited to 'src/new_fields')
-rw-r--r--src/new_fields/Doc.ts8
-rw-r--r--src/new_fields/Types.ts6
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;
}