aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/SerializationHelper.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-05-07 16:29:02 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-05-07 16:29:02 -0400
commit14c776b6d30e0bc0d5b3712f28e4b9f1170eae3b (patch)
tree5255d8cce8a72a5b09cc1ad58661e2176295467a /src/client/util/SerializationHelper.ts
parente19fdbba4cf672aee5bfb59b91b6162431d146d3 (diff)
parent26141a697ae52a7edf3cc6845ce2153111f8860e (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.ts25
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 });
}