diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-07 16:29:02 -0400 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-05-07 16:29:02 -0400 |
commit | 14c776b6d30e0bc0d5b3712f28e4b9f1170eae3b (patch) | |
tree | 5255d8cce8a72a5b09cc1ad58661e2176295467a /src/client/util/SerializationHelper.ts | |
parent | e19fdbba4cf672aee5bfb59b91b6162431d146d3 (diff) | |
parent | 26141a697ae52a7edf3cc6845ce2153111f8860e (diff) |
Merge branch 'master' of github-tsch-brown:browngraphicslab/Dash-Web into new_search
Diffstat (limited to 'src/client/util/SerializationHelper.ts')
-rw-r--r-- | src/client/util/SerializationHelper.ts | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/client/util/SerializationHelper.ts b/src/client/util/SerializationHelper.ts index 7273c3fe4..7ded85e43 100644 --- a/src/client/util/SerializationHelper.ts +++ b/src/client/util/SerializationHelper.ts @@ -1,5 +1,5 @@ import { PropSchema, serialize, deserialize, custom, setDefaultModelSchema, getDefaultModelSchema, primitive, SKIP } from "serializr"; -import { Field } from "../../fields/NewDoc"; +import { Field } from "../../new_fields/Doc"; export namespace SerializationHelper { let serializing: number = 0; @@ -8,8 +8,8 @@ export namespace SerializationHelper { } export function Serialize(obj: Field): any { - if (!obj) { - return null; + if (obj === undefined || obj === null) { + return undefined; } if (typeof obj !== 'object') { @@ -28,8 +28,8 @@ export namespace SerializationHelper { } export function Deserialize(obj: any): any { - if (!obj) { - return null; + if (obj === undefined || obj === null) { + return undefined; } if (typeof obj !== 'object') { @@ -55,14 +55,19 @@ let serializationTypes: { [name: string]: any } = {}; let reverseMap: { [ctor: string]: string } = {}; export interface DeserializableOpts { - (constructor: Function): void; + (constructor: { new(...args: any[]): any }): void; withFields(fields: string[]): Function; } export function Deserializable(name: string): DeserializableOpts; -export function Deserializable(constructor: Function): void; -export function Deserializable(constructor: Function | string): DeserializableOpts | void { - function addToMap(name: string, ctor: Function) { +export function Deserializable(constructor: { new(...args: any[]): any }): void; +export function Deserializable(constructor: { new(...args: any[]): any } | string): DeserializableOpts | void { + function addToMap(name: string, ctor: { new(...args: any[]): any }) { + const schema = getDefaultModelSchema(ctor) as any; + if (schema.targetClass !== ctor) { + const newSchema = { ...schema, factory: () => new ctor() }; + setDefaultModelSchema(ctor, newSchema); + } if (!(name in serializationTypes)) { serializationTypes[name] = ctor; reverseMap[ctor.name] = name; @@ -71,7 +76,7 @@ export function Deserializable(constructor: Function | string): DeserializableOp } } if (typeof constructor === "string") { - return Object.assign((ctor: Function) => { + return Object.assign((ctor: { new(...args: any[]): any }) => { addToMap(constructor, ctor); }, { withFields: Deserializable.withFields }); } |