@cratis/fundamentals 5.6.1 → 5.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/JsonSerializer.ts CHANGED
@@ -58,6 +58,10 @@ const deserializeValueFromField = (field: Field, value: any) => {
58
58
  };
59
59
 
60
60
  const convertTypesOnInstance = (instance: any) => {
61
+ if (typeConverters.has(instance.constructor)) {
62
+ return serializeValueForType(instance.constructor, instance);
63
+ }
64
+
61
65
  const properties = Object.getOwnPropertyNames(instance);
62
66
  const converted: any = {};
63
67
  properties.forEach(property => {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA8E5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/F,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAWtG,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwC5G,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CASvH"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkF5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/F,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAWtG,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwC5G,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CASvH"}
@@ -50,6 +50,9 @@ const deserializeValueFromField = (field, value) => {
50
50
  }
51
51
  };
52
52
  const convertTypesOnInstance = (instance) => {
53
+ if (typeConverters.has(instance.constructor)) {
54
+ return serializeValueForType(instance.constructor, instance);
55
+ }
53
56
  const properties = Object.getOwnPropertyNames(instance);
54
57
  const converted = {};
55
58
  properties.forEach(property => {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\n\ntype typeSerializer = (value: any) => any;\n\nconst typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value],\n [Date, (value: Date) => value.toISOString()],\n [Guid, (value: Guid) => value?.toString() ?? '']\n]);\n\nconst typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value],\n [Date, (value: any) => new Date(value)],\n [Guid, (value: any) => Guid.parse(value.toString())],\n]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n if (typeConverters.has(type)) {\n return typeConverters.get(type)!(value);\n } else {\n return convertTypesOnInstance(value);\n }\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n if (typeSerializers.has(type)) {\n return typeSerializers.get(type)!(value);\n } else {\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value, index, arr) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":["Guid","DerivedType","Fields"],"mappings":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\n\ntype typeSerializer = (value: any) => any;\n\nconst typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value],\n [Date, (value: Date) => value.toISOString()],\n [Guid, (value: Guid) => value?.toString() ?? '']\n]);\n\nconst typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value],\n [Date, (value: any) => new Date(value)],\n [Guid, (value: any) => Guid.parse(value.toString())],\n]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n if (typeConverters.has(type)) {\n return typeConverters.get(type)!(value);\n } else {\n return convertTypesOnInstance(value);\n }\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n if (typeSerializers.has(type)) {\n return typeSerializers.get(type)!(value);\n } else {\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n if (typeConverters.has(instance.constructor)) {\n return serializeValueForType(instance.constructor, instance);\n }\n\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value, index, arr) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":["Guid","DerivedType","Fields"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA8E5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/F,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAWtG,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwC5G,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CASvH"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkF5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/F,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAWtG,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwC5G,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CASvH"}
@@ -48,6 +48,9 @@ const deserializeValueFromField = (field, value) => {
48
48
  }
49
49
  };
50
50
  const convertTypesOnInstance = (instance) => {
51
+ if (typeConverters.has(instance.constructor)) {
52
+ return serializeValueForType(instance.constructor, instance);
53
+ }
51
54
  const properties = Object.getOwnPropertyNames(instance);
52
55
  const converted = {};
53
56
  properties.forEach(property => {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\n\ntype typeSerializer = (value: any) => any;\n\nconst typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value],\n [Date, (value: Date) => value.toISOString()],\n [Guid, (value: Guid) => value?.toString() ?? '']\n]);\n\nconst typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value],\n [Date, (value: any) => new Date(value)],\n [Guid, (value: any) => Guid.parse(value.toString())],\n]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n if (typeConverters.has(type)) {\n return typeConverters.get(type)!(value);\n } else {\n return convertTypesOnInstance(value);\n }\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n if (typeSerializers.has(type)) {\n return typeSerializers.get(type)!(value);\n } else {\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value, index, arr) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\n\ntype typeSerializer = (value: any) => any;\n\nconst typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value],\n [Date, (value: Date) => value.toISOString()],\n [Guid, (value: Guid) => value?.toString() ?? '']\n]);\n\nconst typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value],\n [Date, (value: any) => new Date(value)],\n [Guid, (value: any) => Guid.parse(value.toString())],\n]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n if (typeConverters.has(type)) {\n return typeConverters.get(type)!(value);\n } else {\n return convertTypesOnInstance(value);\n }\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n if (typeSerializers.has(type)) {\n return typeSerializers.get(type)!(value);\n } else {\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n if (typeConverters.has(instance.constructor)) {\n return serializeValueForType(instance.constructor, instance);\n }\n\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends {}>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value, index, arr) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends {}>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -56,6 +56,9 @@ export class TopLevel {
56
56
  @field(Guid)
57
57
  someGuid!: Guid;
58
58
 
59
+ @field(Boolean, true)
60
+ collectionOfGuids!: Guid[];
61
+
59
62
  @field(OtherType)
60
63
  otherType!: OtherType;
61
64
 
@@ -11,6 +11,8 @@ describe('when serializing complex nested object with multiple wellknown types',
11
11
  instance.someString = 'forty two';
12
12
  instance.someDate = new Date('2022-10-07 15:51');
13
13
  instance.someBoolean = true;
14
+ instance.collectionOfGuids = [Guid.create(), Guid.create()];
15
+
14
16
  instance.someGuid = Guid.parse('f0fa7c5e-9f7b-4688-8851-e0b6eeebe28b');
15
17
  instance.otherType = new OtherType();
16
18
  instance.otherType.someNumber = 43;
@@ -37,6 +39,8 @@ describe('when serializing complex nested object with multiple wellknown types',
37
39
  it('should hold correct string for first level string', () => deserialized.someString.should.equal('forty two'));
38
40
  it('should hold correct bool value for first level boolean', () => deserialized.someBoolean.should.be.true);
39
41
  it('should hold correct guid value for first level guid', () => deserialized.someGuid.should.equal(instance.someGuid.toString()));
42
+ it('should hold correct guid value for first guid in the first level guid array', () => deserialized.collectionOfGuids[0].should.equal(instance.collectionOfGuids[0].toString()));
43
+ it('should hold correct guid value for second guid in the first level guid array', () => deserialized.collectionOfGuids[1].should.equal(instance.collectionOfGuids[1].toString()));
40
44
  it('should hold correct value for first level date', () => deserialized.someDate.toString().should.equal(JSON.stringify(instance.someDate).slice(1, -1)));
41
45
 
42
46
  it('should hold correct number for second level number', () => deserialized.otherType.someNumber.should.equal(43));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/fundamentals",
3
- "version": "5.6.1",
3
+ "version": "5.6.2",
4
4
  "description": "",
5
5
  "author": "Cratis",
6
6
  "license": "MIT",