@tsed/json-mapper 6.75.2 → 6.75.3

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/lib/index.js CHANGED
@@ -639,6 +639,11 @@ function toObject(obj, options) {
639
639
  }), {});
640
640
  }
641
641
 
642
+ function getBestType(type, obj) {
643
+ const dataType = core.classOf(obj);
644
+ return core.isClass(dataType) ? dataType : type;
645
+ }
646
+
642
647
  function serialize(obj, _ref = {}) {
643
648
  let {
644
649
  type,
@@ -646,15 +651,12 @@ function serialize(obj, _ref = {}) {
646
651
  } = _ref,
647
652
  options = _objectWithoutPropertiesLoose(_ref, _excluded2);
648
653
 
649
- const types = options.types ? options.types : getJsonMapperTypes(); // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type
650
-
651
- type = type === Object ? undefined : type;
652
- options.groups = groups;
653
-
654
654
  if (core.isEmpty(obj)) {
655
655
  return obj;
656
- } // FIX custom serialization function from @tsed/mongoose and bson
656
+ }
657
657
 
658
+ const types = options.types ? options.types : getJsonMapperTypes();
659
+ options.groups = groups; // FIX custom serialization function from @tsed/mongoose and bson
658
660
 
659
661
  if (typeof obj.toJSON === "function" && obj.$isMongooseModelPrototype || obj._bsontype) {
660
662
  return obj.toJSON(options);
@@ -664,10 +666,13 @@ function serialize(obj, _ref = {}) {
664
666
  return serialize(obj.toJSON(), _extends({}, options, {
665
667
  type: core.classOf(obj)
666
668
  }));
667
- }
669
+ } // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type
670
+
671
+
672
+ type = type === Object ? undefined : type;
668
673
 
669
674
  if (type && core.isClass(type)) {
670
- options.type = type;
675
+ options.type = type = getBestType(type, obj);
671
676
  }
672
677
 
673
678
  if (core.isCollection(obj) && !options.collectionType) {
@@ -697,7 +702,7 @@ function serialize(obj, _ref = {}) {
697
702
  return (_types$get = types.get(Array)) == null ? void 0 : _types$get.serialize(obj, context);
698
703
  }
699
704
 
700
- return !core.isClassObject(core.classOf(type)) ? classToPlainObject(obj, options) : toObject(obj, options);
705
+ return !core.isClassObject(type) ? classToPlainObject(obj, options) : toObject(obj, options);
701
706
  }
702
707
 
703
708
  exports.AfterDeserialize = AfterDeserialize;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/domain/JsonMapperTypesContainer.ts","../src/decorators/jsonMapper.ts","../src/components/ArrayMapper.ts","../src/components/DateMapper.ts","../src/components/MapMapper.ts","../src/components/PrimitiveMapper.ts","../src/components/SetMapper.ts","../src/components/SymbolMapper.ts","../src/decorators/onDeserialize.ts","../src/decorators/onSerialize.ts","../src/decorators/afterDeserialize.ts","../src/decorators/beforeDeserialize.ts","../src/domain/JsonMapperContext.ts","../src/hooks/alterAfterDeserialize.ts","../src/hooks/alterBeforeDeserialize.ts","../src/utils/deserialize.ts","../src/utils/serialize.ts"],"sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nconst JsonMapperTypesContainer: Map<Type<any> | Symbol, JsonMapperMethods> = new Map();\n/**\n * @ignore\n */\nexport function registerJsonTypeMapper(type: Type<any>, token: Type<JsonMapperMethods>) {\n JsonMapperTypesContainer.set(type, new token());\n}\n/**\n * @ignore\n */\nexport function getJsonMapperTypes(): WeakMap<Type<any> | Symbol, JsonMapperMethods> {\n return JsonMapperTypesContainer;\n}\n","import {Type} from \"@tsed/core\";\nimport {registerJsonTypeMapper} from \"../domain/JsonMapperTypesContainer\";\n\n/**\n * Register a new JsonMapper Type\n * @param types\n * @constructor\n */\nexport function JsonMapper(...types: (any | Type)[]): ClassDecorator {\n return (target) => {\n types.forEach((type) => {\n registerJsonTypeMapper(type, target as any);\n });\n };\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Array` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Array)\nexport class ArrayMapper implements JsonMapperMethods {\n deserialize<T = any>(data: any, options: JsonMapperCtx): T[] {\n return [].concat(data).map((item) => options.next(item));\n }\n\n serialize(data: any[], options: JsonMapperCtx): any {\n return [].concat(data as any).map((item) => options.next(item));\n }\n}\n","import {isBoolean} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Date` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Date)\nexport class DateMapper implements JsonMapperMethods {\n deserialize(data: string | number): Date;\n deserialize(data: boolean | null | undefined): boolean | null | undefined;\n deserialize(data: any): any {\n // don't convert unexpected data. In normal case, Ajv reject unexpected data.\n // But by default, we have to skip data deserialization and let user to apply\n // the right mapping\n if (isBoolean(data) || data === null || data === undefined) {\n return data;\n }\n\n return new Date(data);\n }\n\n serialize(object: Date): any {\n return new Date(object).toISOString();\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Map` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Map)\nexport class MapMapper implements JsonMapperMethods {\n deserialize<T = any, C = Map<string, T>>(data: {[key: string]: any}, ctx: JsonMapperCtx<T, C>): Map<string, T> {\n const obj = new Map<string, T>();\n\n objectKeys(data).forEach((key) => {\n obj.set(key, ctx.next(data[key]) as T);\n });\n\n return obj;\n }\n\n serialize<T>(data: Map<string, T>, ctx: JsonMapperCtx): any {\n const obj: any = {};\n\n data.forEach((value: T, key: string) => (obj[key] = ctx.next(value)));\n\n return obj;\n }\n}\n","import {BadRequest} from \"@tsed/exceptions\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `String`, `Number` and `Boolean` types.\n * @jsonmapper\n * @component\n */\n@JsonMapper(String, Number, Boolean)\nexport class PrimitiveMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): string | number | boolean | void | null {\n switch (ctx.type) {\n case String:\n return data === null ? null : \"\" + data;\n\n case Number:\n if ([null, \"null\"].includes(data)) return null;\n\n const n = +data;\n\n if (isNaN(n)) {\n throw new BadRequest(\"Cast error. Expression value is not a number.\");\n }\n\n return n;\n\n case Boolean:\n if ([\"true\", \"1\", true].includes(data)) return true;\n if ([\"false\", \"0\", false].includes(data)) return false;\n if ([null, \"null\"].includes(data)) return null;\n if (data === undefined) return undefined;\n\n return !!data;\n }\n }\n\n serialize(object: string | number | boolean): string | number | boolean {\n return object;\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Set` Type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Set)\nexport class SetMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): Set<T> {\n const obj = new Set<T>();\n\n objectKeys(data).forEach((key) => {\n obj.add(ctx.next(data[key]));\n });\n\n return obj;\n }\n\n serialize<T>(data: Set<T>, ctx: JsonMapperCtx): any[] {\n const array: any[] = [];\n\n data.forEach((value) => array.push(ctx.next(value)));\n\n return array;\n }\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Symbol` type.\n *\n * @jsonmapper\n * @component\n */\n@JsonMapper(Symbol)\nexport class SymbolMapper implements JsonMapperMethods {\n deserialize(data: string): symbol {\n return Symbol.for(data);\n }\n\n serialize(object: Symbol): any {\n return object.toString().replace(\"Symbol(\", \"\").replace(\")\", \"\");\n }\n}\n","import {JsonHookContext, JsonEntityFn} from \"@tsed/schema\";\n\nexport interface OnDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property deserialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnDeserialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnDeserialize(cb: OnDeserializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface OnSerializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property serialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnSerialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnSerialize(cb: OnSerializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onSerialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface AfterDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function after JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @AfterDeserialize((data: Model) => { // After deserialize get the instance class\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function AfterDeserialize(cb: AfterDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"afterDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface BeforeDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @BeforeDeserialize((data: Record<string, unknown>) => { // Before deserialize get the data\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function BeforeDeserialize(cb: BeforeDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"beforeDeserialize\", cb);\n });\n}\n","import {isCollection, Type} from \"@tsed/core\";\nimport {JsonMapperCtx} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\nexport interface JsonMapperContextProps extends Partial<Omit<JsonMapperCtx, \"next\">> {\n next: (data: any, options: any) => void;\n options: any;\n}\n/**\n * @ignore\n */\nexport class JsonMapperContext implements JsonMapperCtx {\n readonly collectionType: Type<any> | undefined;\n readonly type: Type<any> | any;\n readonly options: any;\n private _next: (data: any, options: any) => void;\n\n constructor({type, collectionType, next, options}: JsonMapperContextProps) {\n this.type = type;\n this.collectionType = isCollection(collectionType) ? collectionType : undefined;\n this._next = next;\n this.options = options;\n }\n\n next(data: any) {\n return this._next(data, {\n ...this.options,\n type: this.type\n });\n }\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterAfterDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"afterDeserialize\", data, [options]);\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterBeforeDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"beforeDeserialize\", data, [options]);\n}\n","import {isArray, isEmpty, isNil, MetadataTypes, nameOf, objectKeys, Type} from \"@tsed/core\";\nimport {alterIgnore, getProperties, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {alterAfterDeserialize} from \"../hooks/alterAfterDeserialize\";\nimport {alterBeforeDeserialize} from \"../hooks/alterBeforeDeserialize\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonDeserializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: WeakMap<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n /**\n * Accept additionalProperties or ignore it\n */\n additionalProperties?: boolean;\n /**\n * Use the store which have all metadata to deserialize correctly the model. This\n * property is useful when you deal with metadata parameters.\n */\n store?: JsonEntityStore;\n /**\n *\n */\n groups?: string[] | false;\n\n [key: string]: any;\n}\n\nfunction isDeserializable(obj: any, options: JsonDeserializerOptions) {\n if ((!!options.collectionType && isNil(obj)) || obj === undefined) {\n return false;\n }\n\n return !(isEmpty(options.type) || (options.type === Object && !options.collectionType));\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onDeserialize\", value, [options]);\n}\n\nfunction transformCollection<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object, collectionType} = options;\n\n const context = new JsonMapperContext({\n type,\n collectionType,\n options,\n next: (data, {collectionType, ...options}) => deserialize(data, options)\n });\n\n return types?.get(options.collectionType)?.deserialize<T>(src, context);\n}\n\nfunction transformType<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object} = options;\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data, {type, ...options}) => deserialize(data, options)\n });\n\n return types?.get(type)?.deserialize<T>(src, context);\n}\n\n/**\n * Transform given plain object to class.\n * @param src\n * @param options\n */\nexport function plainObjectToClass<T = any>(src: any, options: JsonDeserializerOptions): T {\n if (isEmpty(src)) {\n return src;\n }\n\n const {type, store = JsonEntityStore.from(type), ...next} = options;\n\n const propertiesMap = getProperties(store, {...options, withIgnoredProps: true});\n\n let keys = objectKeys(src);\n const additionalProperties = propertiesMap.size ? !!store.schema.get(\"additionalProperties\") || options.additionalProperties : true;\n src = alterBeforeDeserialize(src, store.schema, options);\n const out: any = new type(src);\n\n propertiesMap.forEach((propStore) => {\n const key = options.useAlias\n ? propStore.parent.schema.getAliasOf(propStore.propertyName) || propStore.propertyName\n : propStore.propertyName;\n\n keys = keys.filter((k) => k !== key);\n\n next.type = propStore.computedType;\n\n if (alterIgnore(propStore.itemSchema, options)) {\n return;\n }\n\n let value = alterValue(propStore.schema, src[key], {...options, self: src});\n\n if (propStore.schema.hasGenerics) {\n next.nestedGenerics = propStore.schema.nestedGenerics;\n } else if (propStore.schema.isGeneric && options.nestedGenerics) {\n const [genericTypes = [], ...nestedGenerics] = options.nestedGenerics;\n const genericLabels = propStore.parent.schema.genericLabels || [];\n\n next.type = genericTypes[genericLabels.indexOf(propStore.schema.genericType)] || Object;\n\n if (next.type instanceof JsonSchema) {\n next.type = next.type.getTarget();\n }\n\n next.nestedGenerics = nestedGenerics;\n }\n\n value = deserialize(value, {\n ...next,\n type: value === src[key] ? next.type : undefined,\n collectionType: propStore.collectionType\n });\n\n if (value !== undefined) {\n out[propStore.propertyName] = value;\n }\n });\n\n if (additionalProperties) {\n keys.forEach((key) => {\n out[key] = src[key];\n });\n }\n\n return alterAfterDeserialize(out, store.schema, options);\n}\n\nfunction buildOptions(options: JsonDeserializerOptions<any, any>): any {\n if (options.store instanceof JsonEntityStore) {\n if (options.store.parameter && options.store.parameter.nestedGenerics.length) {\n options.nestedGenerics = options.store.parameter.nestedGenerics;\n }\n\n options.type = options.store.computedType;\n options.collectionType = options.store.collectionType;\n\n delete options.store;\n }\n\n return {\n groups: false,\n useAlias: true,\n ...options,\n type: options.type ? options.type : undefined,\n types: options.types ? options.types : getJsonMapperTypes()\n };\n}\n\n/**\n * Transform given source to class base on the given `options.type`.\n *\n * @param src\n * @param options\n */\nexport function deserialize<T = any>(src: any, options: JsonDeserializerOptions = {}): T {\n options = buildOptions(options);\n\n if (!isDeserializable(src, options)) {\n return src;\n }\n\n if (!options.collectionType && isArray(src)) {\n options.collectionType = Array;\n }\n\n if (options.collectionType) {\n if (!options.types?.has(options.collectionType)) {\n throw new Error(`${nameOf(options.collectionType)} is not supported by JsonMapper.`);\n }\n\n return transformCollection(src, options);\n }\n\n if (options.types?.has(options.type)) {\n return transformType(src, options);\n }\n\n // class converter\n return plainObjectToClass(src, options);\n}\n","import {\n classOf,\n isArray,\n isClass,\n isClassObject,\n isCollection,\n isEmpty,\n isFunction,\n isNil,\n MetadataTypes,\n objectKeys,\n Type\n} from \"@tsed/core\";\nimport {alterIgnore, getPropertiesStores, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonSerializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: Map<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n\n [key: string]: any;\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onSerialize\", value, [options]);\n}\n\nfunction getSchemaProperties(storedJson: JsonEntityStore, obj: any) {\n const stores = Array.from(getPropertiesStores(storedJson).entries());\n\n if (!stores.length) {\n // fallback to auto discovering field from obj\n objectKeys(obj).forEach((key) => {\n const propStore = JsonEntityStore.from(classOf(storedJson.target), key);\n stores.push([key, propStore]);\n });\n }\n\n return stores;\n}\n\nfunction getObjectProperties(obj: any): [string, any][] {\n return Object.entries(obj).filter(([, value]) => !isFunction(value));\n}\n\nfunction getType(propStore: JsonEntityStore, value: any) {\n if (isNil(value) || propStore.type === Object || isCollection(propStore.type)) {\n return undefined;\n }\n\n return propStore.type;\n}\n\nexport function classToPlainObject(obj: any, options: JsonSerializerOptions<any, any>) {\n const {useAlias = true, type, ...props} = options;\n\n const entity = JsonEntityStore.from(type || obj);\n\n return getSchemaProperties(entity, obj).reduce((newObj, [key, propStore]) => {\n const schema = propStore.schema;\n\n if (alterIgnore(schema, {useAlias, ...props, self: obj})) {\n return newObj;\n }\n\n let value = alterValue(schema, obj[key], {useAlias, ...props, self: obj});\n value = serialize(value, {\n useAlias,\n type: value === obj[key] ? getType(propStore, value) : undefined,\n collectionType: propStore.collectionType,\n ...props\n });\n\n if (value === undefined) {\n return newObj;\n }\n\n key = useAlias ? propStore.parent.schema.getAliasOf(key) || key : key;\n\n return {\n ...newObj,\n [key]: value\n };\n }, {});\n}\n\nfunction toObject(obj: any, options: JsonSerializerOptions): any {\n return getObjectProperties(obj).reduce(\n (newObj, [key, value]) => ({\n ...newObj,\n [key]: serialize(value, options)\n }),\n {}\n );\n}\n\nexport function serialize(obj: any, {type, collectionType, groups = false, ...options}: JsonSerializerOptions = {}): any {\n const types = options.types ? options.types : getJsonMapperTypes();\n // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type\n type = type === Object ? undefined : type;\n\n options.groups = groups;\n\n if (isEmpty(obj)) {\n return obj;\n }\n\n // FIX custom serialization function from @tsed/mongoose and bson\n if ((typeof obj.toJSON === \"function\" && obj.$isMongooseModelPrototype) || obj._bsontype) {\n return obj.toJSON(options);\n }\n\n if (typeof obj.toJSON === \"function\") {\n return serialize(obj.toJSON(), {...options, type: classOf(obj)});\n }\n\n if (type && isClass(type)) {\n options.type = type;\n }\n\n if (isCollection(obj) && !options.collectionType) {\n type = classOf(obj);\n options.collectionType = type;\n }\n\n type = classOf(type || obj);\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data) =>\n serialize(data, {\n ...options,\n collectionType: undefined,\n type: options.type\n })\n });\n\n if (types.has(type)) {\n const jsonMapper = types.get(type)!;\n\n return jsonMapper.serialize(obj, context);\n }\n\n if (isArray(obj)) {\n // Serialize Array class like\n return types.get(Array)?.serialize(obj, context);\n }\n\n return !isClassObject(classOf(type)) ? classToPlainObject(obj, options) : toObject(obj, options);\n}\n"],"names":["JsonMapperTypesContainer","Map","registerJsonTypeMapper","type","token","set","getJsonMapperTypes","JsonMapper","types","target","forEach","ArrayMapper","deserialize","data","options","concat","map","item","next","serialize","Array","DateMapper","isBoolean","undefined","Date","object","toISOString","MapMapper","ctx","obj","objectKeys","key","value","PrimitiveMapper","String","Number","includes","n","isNaN","BadRequest","Boolean","SetMapper","Set","add","array","push","SymbolMapper","Symbol","for","toString","replace","OnDeserialize","cb","JsonEntityFn","storedJson","schema","$hooks","on","OnSerialize","AfterDeserialize","BeforeDeserialize","JsonMapperContext","constructor","collectionType","isCollection","_next","alterAfterDeserialize","alter","alterBeforeDeserialize","isDeserializable","isNil","isEmpty","Object","alterValue","transformCollection","src","context","get","transformType","plainObjectToClass","store","JsonEntityStore","from","propertiesMap","getProperties","withIgnoredProps","keys","additionalProperties","size","out","propStore","useAlias","parent","getAliasOf","propertyName","filter","k","computedType","alterIgnore","itemSchema","self","hasGenerics","nestedGenerics","isGeneric","genericTypes","genericLabels","indexOf","genericType","JsonSchema","getTarget","buildOptions","parameter","length","groups","isArray","has","Error","nameOf","getSchemaProperties","stores","getPropertiesStores","entries","classOf","getObjectProperties","isFunction","getType","classToPlainObject","props","entity","reduce","newObj","toObject","toJSON","$isMongooseModelPrototype","_bsontype","isClass","jsonMapper","isClassObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/domain/JsonMapperTypesContainer.ts","../src/decorators/jsonMapper.ts","../src/components/ArrayMapper.ts","../src/components/DateMapper.ts","../src/components/MapMapper.ts","../src/components/PrimitiveMapper.ts","../src/components/SetMapper.ts","../src/components/SymbolMapper.ts","../src/decorators/onDeserialize.ts","../src/decorators/onSerialize.ts","../src/decorators/afterDeserialize.ts","../src/decorators/beforeDeserialize.ts","../src/domain/JsonMapperContext.ts","../src/hooks/alterAfterDeserialize.ts","../src/hooks/alterBeforeDeserialize.ts","../src/utils/deserialize.ts","../src/utils/serialize.ts"],"sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nconst JsonMapperTypesContainer: Map<Type<any> | Symbol, JsonMapperMethods> = new Map();\n/**\n * @ignore\n */\nexport function registerJsonTypeMapper(type: Type<any>, token: Type<JsonMapperMethods>) {\n JsonMapperTypesContainer.set(type, new token());\n}\n/**\n * @ignore\n */\nexport function getJsonMapperTypes(): WeakMap<Type<any> | Symbol, JsonMapperMethods> {\n return JsonMapperTypesContainer;\n}\n","import {Type} from \"@tsed/core\";\nimport {registerJsonTypeMapper} from \"../domain/JsonMapperTypesContainer\";\n\n/**\n * Register a new JsonMapper Type\n * @param types\n * @constructor\n */\nexport function JsonMapper(...types: (any | Type)[]): ClassDecorator {\n return (target) => {\n types.forEach((type) => {\n registerJsonTypeMapper(type, target as any);\n });\n };\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Array` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Array)\nexport class ArrayMapper implements JsonMapperMethods {\n deserialize<T = any>(data: any, options: JsonMapperCtx): T[] {\n return [].concat(data).map((item) => options.next(item));\n }\n\n serialize(data: any[], options: JsonMapperCtx): any {\n return [].concat(data as any).map((item) => options.next(item));\n }\n}\n","import {isBoolean} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Date` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Date)\nexport class DateMapper implements JsonMapperMethods {\n deserialize(data: string | number): Date;\n deserialize(data: boolean | null | undefined): boolean | null | undefined;\n deserialize(data: any): any {\n // don't convert unexpected data. In normal case, Ajv reject unexpected data.\n // But by default, we have to skip data deserialization and let user to apply\n // the right mapping\n if (isBoolean(data) || data === null || data === undefined) {\n return data;\n }\n\n return new Date(data);\n }\n\n serialize(object: Date): any {\n return new Date(object).toISOString();\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Map` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Map)\nexport class MapMapper implements JsonMapperMethods {\n deserialize<T = any, C = Map<string, T>>(data: {[key: string]: any}, ctx: JsonMapperCtx<T, C>): Map<string, T> {\n const obj = new Map<string, T>();\n\n objectKeys(data).forEach((key) => {\n obj.set(key, ctx.next(data[key]) as T);\n });\n\n return obj;\n }\n\n serialize<T>(data: Map<string, T>, ctx: JsonMapperCtx): any {\n const obj: any = {};\n\n data.forEach((value: T, key: string) => (obj[key] = ctx.next(value)));\n\n return obj;\n }\n}\n","import {BadRequest} from \"@tsed/exceptions\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `String`, `Number` and `Boolean` types.\n * @jsonmapper\n * @component\n */\n@JsonMapper(String, Number, Boolean)\nexport class PrimitiveMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): string | number | boolean | void | null {\n switch (ctx.type) {\n case String:\n return data === null ? null : \"\" + data;\n\n case Number:\n if ([null, \"null\"].includes(data)) return null;\n\n const n = +data;\n\n if (isNaN(n)) {\n throw new BadRequest(\"Cast error. Expression value is not a number.\");\n }\n\n return n;\n\n case Boolean:\n if ([\"true\", \"1\", true].includes(data)) return true;\n if ([\"false\", \"0\", false].includes(data)) return false;\n if ([null, \"null\"].includes(data)) return null;\n if (data === undefined) return undefined;\n\n return !!data;\n }\n }\n\n serialize(object: string | number | boolean): string | number | boolean {\n return object;\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Set` Type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Set)\nexport class SetMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): Set<T> {\n const obj = new Set<T>();\n\n objectKeys(data).forEach((key) => {\n obj.add(ctx.next(data[key]));\n });\n\n return obj;\n }\n\n serialize<T>(data: Set<T>, ctx: JsonMapperCtx): any[] {\n const array: any[] = [];\n\n data.forEach((value) => array.push(ctx.next(value)));\n\n return array;\n }\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Symbol` type.\n *\n * @jsonmapper\n * @component\n */\n@JsonMapper(Symbol)\nexport class SymbolMapper implements JsonMapperMethods {\n deserialize(data: string): symbol {\n return Symbol.for(data);\n }\n\n serialize(object: Symbol): any {\n return object.toString().replace(\"Symbol(\", \"\").replace(\")\", \"\");\n }\n}\n","import {JsonHookContext, JsonEntityFn} from \"@tsed/schema\";\n\nexport interface OnDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property deserialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnDeserialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnDeserialize(cb: OnDeserializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface OnSerializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property serialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnSerialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnSerialize(cb: OnSerializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onSerialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface AfterDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function after JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @AfterDeserialize((data: Model) => { // After deserialize get the instance class\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function AfterDeserialize(cb: AfterDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"afterDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface BeforeDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @BeforeDeserialize((data: Record<string, unknown>) => { // Before deserialize get the data\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function BeforeDeserialize(cb: BeforeDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"beforeDeserialize\", cb);\n });\n}\n","import {isCollection, Type} from \"@tsed/core\";\nimport {JsonMapperCtx} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\nexport interface JsonMapperContextProps extends Partial<Omit<JsonMapperCtx, \"next\">> {\n next: (data: any, options: any) => void;\n options: any;\n}\n/**\n * @ignore\n */\nexport class JsonMapperContext implements JsonMapperCtx {\n readonly collectionType: Type<any> | undefined;\n readonly type: Type<any> | any;\n readonly options: any;\n private _next: (data: any, options: any) => void;\n\n constructor({type, collectionType, next, options}: JsonMapperContextProps) {\n this.type = type;\n this.collectionType = isCollection(collectionType) ? collectionType : undefined;\n this._next = next;\n this.options = options;\n }\n\n next(data: any) {\n return this._next(data, {\n ...this.options,\n type: this.type\n });\n }\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterAfterDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"afterDeserialize\", data, [options]);\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterBeforeDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"beforeDeserialize\", data, [options]);\n}\n","import {isArray, isEmpty, isNil, MetadataTypes, nameOf, objectKeys, Type} from \"@tsed/core\";\nimport {alterIgnore, getProperties, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {alterAfterDeserialize} from \"../hooks/alterAfterDeserialize\";\nimport {alterBeforeDeserialize} from \"../hooks/alterBeforeDeserialize\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonDeserializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: WeakMap<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n /**\n * Accept additionalProperties or ignore it\n */\n additionalProperties?: boolean;\n /**\n * Use the store which have all metadata to deserialize correctly the model. This\n * property is useful when you deal with metadata parameters.\n */\n store?: JsonEntityStore;\n /**\n *\n */\n groups?: string[] | false;\n\n [key: string]: any;\n}\n\nfunction isDeserializable(obj: any, options: JsonDeserializerOptions) {\n if ((!!options.collectionType && isNil(obj)) || obj === undefined) {\n return false;\n }\n\n return !(isEmpty(options.type) || (options.type === Object && !options.collectionType));\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onDeserialize\", value, [options]);\n}\n\nfunction transformCollection<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object, collectionType} = options;\n\n const context = new JsonMapperContext({\n type,\n collectionType,\n options,\n next: (data, {collectionType, ...options}) => deserialize(data, options)\n });\n\n return types?.get(options.collectionType)?.deserialize<T>(src, context);\n}\n\nfunction transformType<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object} = options;\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data, {type, ...options}) => deserialize(data, options)\n });\n\n return types?.get(type)?.deserialize<T>(src, context);\n}\n\n/**\n * Transform given plain object to class.\n * @param src\n * @param options\n */\nexport function plainObjectToClass<T = any>(src: any, options: JsonDeserializerOptions): T {\n if (isEmpty(src)) {\n return src;\n }\n\n const {type, store = JsonEntityStore.from(type), ...next} = options;\n\n const propertiesMap = getProperties(store, {...options, withIgnoredProps: true});\n\n let keys = objectKeys(src);\n const additionalProperties = propertiesMap.size ? !!store.schema.get(\"additionalProperties\") || options.additionalProperties : true;\n src = alterBeforeDeserialize(src, store.schema, options);\n const out: any = new type(src);\n\n propertiesMap.forEach((propStore) => {\n const key = options.useAlias\n ? propStore.parent.schema.getAliasOf(propStore.propertyName) || propStore.propertyName\n : propStore.propertyName;\n\n keys = keys.filter((k) => k !== key);\n\n next.type = propStore.computedType;\n\n if (alterIgnore(propStore.itemSchema, options)) {\n return;\n }\n\n let value = alterValue(propStore.schema, src[key], {...options, self: src});\n\n if (propStore.schema.hasGenerics) {\n next.nestedGenerics = propStore.schema.nestedGenerics;\n } else if (propStore.schema.isGeneric && options.nestedGenerics) {\n const [genericTypes = [], ...nestedGenerics] = options.nestedGenerics;\n const genericLabels = propStore.parent.schema.genericLabels || [];\n\n next.type = genericTypes[genericLabels.indexOf(propStore.schema.genericType)] || Object;\n\n if (next.type instanceof JsonSchema) {\n next.type = next.type.getTarget();\n }\n\n next.nestedGenerics = nestedGenerics;\n }\n\n value = deserialize(value, {\n ...next,\n type: value === src[key] ? next.type : undefined,\n collectionType: propStore.collectionType\n });\n\n if (value !== undefined) {\n out[propStore.propertyName] = value;\n }\n });\n\n if (additionalProperties) {\n keys.forEach((key) => {\n out[key] = src[key];\n });\n }\n\n return alterAfterDeserialize(out, store.schema, options);\n}\n\nfunction buildOptions(options: JsonDeserializerOptions<any, any>): any {\n if (options.store instanceof JsonEntityStore) {\n if (options.store.parameter && options.store.parameter.nestedGenerics.length) {\n options.nestedGenerics = options.store.parameter.nestedGenerics;\n }\n\n options.type = options.store.computedType;\n options.collectionType = options.store.collectionType;\n\n delete options.store;\n }\n\n return {\n groups: false,\n useAlias: true,\n ...options,\n type: options.type ? options.type : undefined,\n types: options.types ? options.types : getJsonMapperTypes()\n };\n}\n\n/**\n * Transform given source to class base on the given `options.type`.\n *\n * @param src\n * @param options\n */\nexport function deserialize<T = any>(src: any, options: JsonDeserializerOptions = {}): T {\n options = buildOptions(options);\n\n if (!isDeserializable(src, options)) {\n return src;\n }\n\n if (!options.collectionType && isArray(src)) {\n options.collectionType = Array;\n }\n\n if (options.collectionType) {\n if (!options.types?.has(options.collectionType)) {\n throw new Error(`${nameOf(options.collectionType)} is not supported by JsonMapper.`);\n }\n\n return transformCollection(src, options);\n }\n\n if (options.types?.has(options.type)) {\n return transformType(src, options);\n }\n\n // class converter\n return plainObjectToClass(src, options);\n}\n","import {\n classOf,\n isArray,\n isClass,\n isClassObject,\n isCollection,\n isEmpty,\n isFunction,\n isNil,\n MetadataTypes,\n objectKeys,\n Type\n} from \"@tsed/core\";\nimport {alterIgnore, getPropertiesStores, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonSerializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: Map<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n\n [key: string]: any;\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onSerialize\", value, [options]);\n}\n\nfunction getSchemaProperties(storedJson: JsonEntityStore, obj: any) {\n const stores = Array.from(getPropertiesStores(storedJson).entries());\n\n if (!stores.length) {\n // fallback to auto discovering field from obj\n objectKeys(obj).forEach((key) => {\n const propStore = JsonEntityStore.from(classOf(storedJson.target), key);\n stores.push([key, propStore]);\n });\n }\n\n return stores;\n}\n\nfunction getObjectProperties(obj: any): [string, any][] {\n return Object.entries(obj).filter(([, value]) => !isFunction(value));\n}\n\nfunction getType(propStore: JsonEntityStore, value: any) {\n if (isNil(value) || propStore.type === Object || isCollection(propStore.type)) {\n return undefined;\n }\n\n return propStore.type;\n}\n\nexport function classToPlainObject(obj: any, options: JsonSerializerOptions<any, any>) {\n const {useAlias = true, type, ...props} = options;\n\n const entity = JsonEntityStore.from(type || obj);\n\n return getSchemaProperties(entity, obj).reduce((newObj, [key, propStore]) => {\n const schema = propStore.schema;\n\n if (alterIgnore(schema, {useAlias, ...props, self: obj})) {\n return newObj;\n }\n\n let value = alterValue(schema, obj[key], {useAlias, ...props, self: obj});\n value = serialize(value, {\n useAlias,\n type: value === obj[key] ? getType(propStore, value) : undefined,\n collectionType: propStore.collectionType,\n ...props\n });\n\n if (value === undefined) {\n return newObj;\n }\n\n key = useAlias ? propStore.parent.schema.getAliasOf(key) || key : key;\n\n return {\n ...newObj,\n [key]: value\n };\n }, {});\n}\n\nfunction toObject(obj: any, options: JsonSerializerOptions): any {\n return getObjectProperties(obj).reduce(\n (newObj, [key, value]) => ({\n ...newObj,\n [key]: serialize(value, options)\n }),\n {}\n );\n}\n\nfunction getBestType(type: Type<any>, obj: any) {\n const dataType = classOf(obj);\n\n return isClass(dataType) ? dataType : type;\n}\n\nexport function serialize(obj: any, {type, collectionType, groups = false, ...options}: JsonSerializerOptions = {}): any {\n if (isEmpty(obj)) {\n return obj;\n }\n\n const types = options.types ? options.types : getJsonMapperTypes();\n options.groups = groups;\n\n // FIX custom serialization function from @tsed/mongoose and bson\n if ((typeof obj.toJSON === \"function\" && obj.$isMongooseModelPrototype) || obj._bsontype) {\n return obj.toJSON(options);\n }\n\n if (typeof obj.toJSON === \"function\") {\n return serialize(obj.toJSON(), {...options, type: classOf(obj)});\n }\n\n // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type\n type = type === Object ? undefined : type;\n\n if (type && isClass(type)) {\n options.type = type = getBestType(type, obj);\n }\n\n if (isCollection(obj) && !options.collectionType) {\n type = classOf(obj);\n options.collectionType = type;\n }\n\n type = classOf(type || obj);\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data) =>\n serialize(data, {\n ...options,\n collectionType: undefined,\n type: options.type\n })\n });\n\n if (types.has(type)) {\n const jsonMapper = types.get(type)!;\n\n return jsonMapper.serialize(obj, context);\n }\n\n if (isArray(obj)) {\n // Serialize Array class like\n return types.get(Array)?.serialize(obj, context);\n }\n\n return !isClassObject(type) ? classToPlainObject(obj, options) : toObject(obj, options);\n}\n"],"names":["JsonMapperTypesContainer","Map","registerJsonTypeMapper","type","token","set","getJsonMapperTypes","JsonMapper","types","target","forEach","ArrayMapper","deserialize","data","options","concat","map","item","next","serialize","Array","DateMapper","isBoolean","undefined","Date","object","toISOString","MapMapper","ctx","obj","objectKeys","key","value","PrimitiveMapper","String","Number","includes","n","isNaN","BadRequest","Boolean","SetMapper","Set","add","array","push","SymbolMapper","Symbol","for","toString","replace","OnDeserialize","cb","JsonEntityFn","storedJson","schema","$hooks","on","OnSerialize","AfterDeserialize","BeforeDeserialize","JsonMapperContext","constructor","collectionType","isCollection","_next","alterAfterDeserialize","alter","alterBeforeDeserialize","isDeserializable","isNil","isEmpty","Object","alterValue","transformCollection","src","context","get","transformType","plainObjectToClass","store","JsonEntityStore","from","propertiesMap","getProperties","withIgnoredProps","keys","additionalProperties","size","out","propStore","useAlias","parent","getAliasOf","propertyName","filter","k","computedType","alterIgnore","itemSchema","self","hasGenerics","nestedGenerics","isGeneric","genericTypes","genericLabels","indexOf","genericType","JsonSchema","getTarget","buildOptions","parameter","length","groups","isArray","has","Error","nameOf","getSchemaProperties","stores","getPropertiesStores","entries","classOf","getObjectProperties","isFunction","getType","classToPlainObject","props","entity","reduce","newObj","toObject","getBestType","dataType","isClass","toJSON","$isMongooseModelPrototype","_bsontype","jsonMapper","isClassObject"],"mappings":"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"}
@@ -639,6 +639,11 @@ function toObject(obj, options) {
639
639
  }), {});
640
640
  }
641
641
 
642
+ function getBestType(type, obj) {
643
+ const dataType = classOf(obj);
644
+ return isClass(dataType) ? dataType : type;
645
+ }
646
+
642
647
  function serialize(obj, _ref = {}) {
643
648
  let {
644
649
  type,
@@ -646,15 +651,12 @@ function serialize(obj, _ref = {}) {
646
651
  } = _ref,
647
652
  options = _objectWithoutPropertiesLoose(_ref, _excluded2);
648
653
 
649
- const types = options.types ? options.types : getJsonMapperTypes(); // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type
650
-
651
- type = type === Object ? undefined : type;
652
- options.groups = groups;
653
-
654
654
  if (isEmpty(obj)) {
655
655
  return obj;
656
- } // FIX custom serialization function from @tsed/mongoose and bson
656
+ }
657
657
 
658
+ const types = options.types ? options.types : getJsonMapperTypes();
659
+ options.groups = groups; // FIX custom serialization function from @tsed/mongoose and bson
658
660
 
659
661
  if (typeof obj.toJSON === "function" && obj.$isMongooseModelPrototype || obj._bsontype) {
660
662
  return obj.toJSON(options);
@@ -664,10 +666,13 @@ function serialize(obj, _ref = {}) {
664
666
  return serialize(obj.toJSON(), _extends({}, options, {
665
667
  type: classOf(obj)
666
668
  }));
667
- }
669
+ } // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type
670
+
671
+
672
+ type = type === Object ? undefined : type;
668
673
 
669
674
  if (type && isClass(type)) {
670
- options.type = type;
675
+ options.type = type = getBestType(type, obj);
671
676
  }
672
677
 
673
678
  if (isCollection(obj) && !options.collectionType) {
@@ -697,7 +702,7 @@ function serialize(obj, _ref = {}) {
697
702
  return (_types$get = types.get(Array)) == null ? void 0 : _types$get.serialize(obj, context);
698
703
  }
699
704
 
700
- return !isClassObject(classOf(type)) ? classToPlainObject(obj, options) : toObject(obj, options);
705
+ return !isClassObject(type) ? classToPlainObject(obj, options) : toObject(obj, options);
701
706
  }
702
707
 
703
708
  export { AfterDeserialize, ArrayMapper, BeforeDeserialize, DateMapper, JsonMapper, JsonMapperContext, MapMapper, OnDeserialize, OnSerialize, PrimitiveMapper, SetMapper, SymbolMapper, classToPlainObject, deserialize, getJsonMapperTypes, plainObjectToClass, registerJsonTypeMapper, serialize };
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/domain/JsonMapperTypesContainer.ts","../src/decorators/jsonMapper.ts","../src/components/ArrayMapper.ts","../src/components/DateMapper.ts","../src/components/MapMapper.ts","../src/components/PrimitiveMapper.ts","../src/components/SetMapper.ts","../src/components/SymbolMapper.ts","../src/decorators/onDeserialize.ts","../src/decorators/onSerialize.ts","../src/decorators/afterDeserialize.ts","../src/decorators/beforeDeserialize.ts","../src/domain/JsonMapperContext.ts","../src/hooks/alterAfterDeserialize.ts","../src/hooks/alterBeforeDeserialize.ts","../src/utils/deserialize.ts","../src/utils/serialize.ts"],"sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nconst JsonMapperTypesContainer: Map<Type<any> | Symbol, JsonMapperMethods> = new Map();\n/**\n * @ignore\n */\nexport function registerJsonTypeMapper(type: Type<any>, token: Type<JsonMapperMethods>) {\n JsonMapperTypesContainer.set(type, new token());\n}\n/**\n * @ignore\n */\nexport function getJsonMapperTypes(): WeakMap<Type<any> | Symbol, JsonMapperMethods> {\n return JsonMapperTypesContainer;\n}\n","import {Type} from \"@tsed/core\";\nimport {registerJsonTypeMapper} from \"../domain/JsonMapperTypesContainer\";\n\n/**\n * Register a new JsonMapper Type\n * @param types\n * @constructor\n */\nexport function JsonMapper(...types: (any | Type)[]): ClassDecorator {\n return (target) => {\n types.forEach((type) => {\n registerJsonTypeMapper(type, target as any);\n });\n };\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Array` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Array)\nexport class ArrayMapper implements JsonMapperMethods {\n deserialize<T = any>(data: any, options: JsonMapperCtx): T[] {\n return [].concat(data).map((item) => options.next(item));\n }\n\n serialize(data: any[], options: JsonMapperCtx): any {\n return [].concat(data as any).map((item) => options.next(item));\n }\n}\n","import {isBoolean} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Date` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Date)\nexport class DateMapper implements JsonMapperMethods {\n deserialize(data: string | number): Date;\n deserialize(data: boolean | null | undefined): boolean | null | undefined;\n deserialize(data: any): any {\n // don't convert unexpected data. In normal case, Ajv reject unexpected data.\n // But by default, we have to skip data deserialization and let user to apply\n // the right mapping\n if (isBoolean(data) || data === null || data === undefined) {\n return data;\n }\n\n return new Date(data);\n }\n\n serialize(object: Date): any {\n return new Date(object).toISOString();\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Map` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Map)\nexport class MapMapper implements JsonMapperMethods {\n deserialize<T = any, C = Map<string, T>>(data: {[key: string]: any}, ctx: JsonMapperCtx<T, C>): Map<string, T> {\n const obj = new Map<string, T>();\n\n objectKeys(data).forEach((key) => {\n obj.set(key, ctx.next(data[key]) as T);\n });\n\n return obj;\n }\n\n serialize<T>(data: Map<string, T>, ctx: JsonMapperCtx): any {\n const obj: any = {};\n\n data.forEach((value: T, key: string) => (obj[key] = ctx.next(value)));\n\n return obj;\n }\n}\n","import {BadRequest} from \"@tsed/exceptions\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `String`, `Number` and `Boolean` types.\n * @jsonmapper\n * @component\n */\n@JsonMapper(String, Number, Boolean)\nexport class PrimitiveMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): string | number | boolean | void | null {\n switch (ctx.type) {\n case String:\n return data === null ? null : \"\" + data;\n\n case Number:\n if ([null, \"null\"].includes(data)) return null;\n\n const n = +data;\n\n if (isNaN(n)) {\n throw new BadRequest(\"Cast error. Expression value is not a number.\");\n }\n\n return n;\n\n case Boolean:\n if ([\"true\", \"1\", true].includes(data)) return true;\n if ([\"false\", \"0\", false].includes(data)) return false;\n if ([null, \"null\"].includes(data)) return null;\n if (data === undefined) return undefined;\n\n return !!data;\n }\n }\n\n serialize(object: string | number | boolean): string | number | boolean {\n return object;\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Set` Type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Set)\nexport class SetMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): Set<T> {\n const obj = new Set<T>();\n\n objectKeys(data).forEach((key) => {\n obj.add(ctx.next(data[key]));\n });\n\n return obj;\n }\n\n serialize<T>(data: Set<T>, ctx: JsonMapperCtx): any[] {\n const array: any[] = [];\n\n data.forEach((value) => array.push(ctx.next(value)));\n\n return array;\n }\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Symbol` type.\n *\n * @jsonmapper\n * @component\n */\n@JsonMapper(Symbol)\nexport class SymbolMapper implements JsonMapperMethods {\n deserialize(data: string): symbol {\n return Symbol.for(data);\n }\n\n serialize(object: Symbol): any {\n return object.toString().replace(\"Symbol(\", \"\").replace(\")\", \"\");\n }\n}\n","import {JsonHookContext, JsonEntityFn} from \"@tsed/schema\";\n\nexport interface OnDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property deserialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnDeserialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnDeserialize(cb: OnDeserializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface OnSerializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property serialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnSerialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnSerialize(cb: OnSerializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onSerialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface AfterDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function after JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @AfterDeserialize((data: Model) => { // After deserialize get the instance class\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function AfterDeserialize(cb: AfterDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"afterDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface BeforeDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @BeforeDeserialize((data: Record<string, unknown>) => { // Before deserialize get the data\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function BeforeDeserialize(cb: BeforeDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"beforeDeserialize\", cb);\n });\n}\n","import {isCollection, Type} from \"@tsed/core\";\nimport {JsonMapperCtx} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\nexport interface JsonMapperContextProps extends Partial<Omit<JsonMapperCtx, \"next\">> {\n next: (data: any, options: any) => void;\n options: any;\n}\n/**\n * @ignore\n */\nexport class JsonMapperContext implements JsonMapperCtx {\n readonly collectionType: Type<any> | undefined;\n readonly type: Type<any> | any;\n readonly options: any;\n private _next: (data: any, options: any) => void;\n\n constructor({type, collectionType, next, options}: JsonMapperContextProps) {\n this.type = type;\n this.collectionType = isCollection(collectionType) ? collectionType : undefined;\n this._next = next;\n this.options = options;\n }\n\n next(data: any) {\n return this._next(data, {\n ...this.options,\n type: this.type\n });\n }\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterAfterDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"afterDeserialize\", data, [options]);\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterBeforeDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"beforeDeserialize\", data, [options]);\n}\n","import {isArray, isEmpty, isNil, MetadataTypes, nameOf, objectKeys, Type} from \"@tsed/core\";\nimport {alterIgnore, getProperties, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {alterAfterDeserialize} from \"../hooks/alterAfterDeserialize\";\nimport {alterBeforeDeserialize} from \"../hooks/alterBeforeDeserialize\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonDeserializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: WeakMap<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n /**\n * Accept additionalProperties or ignore it\n */\n additionalProperties?: boolean;\n /**\n * Use the store which have all metadata to deserialize correctly the model. This\n * property is useful when you deal with metadata parameters.\n */\n store?: JsonEntityStore;\n /**\n *\n */\n groups?: string[] | false;\n\n [key: string]: any;\n}\n\nfunction isDeserializable(obj: any, options: JsonDeserializerOptions) {\n if ((!!options.collectionType && isNil(obj)) || obj === undefined) {\n return false;\n }\n\n return !(isEmpty(options.type) || (options.type === Object && !options.collectionType));\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onDeserialize\", value, [options]);\n}\n\nfunction transformCollection<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object, collectionType} = options;\n\n const context = new JsonMapperContext({\n type,\n collectionType,\n options,\n next: (data, {collectionType, ...options}) => deserialize(data, options)\n });\n\n return types?.get(options.collectionType)?.deserialize<T>(src, context);\n}\n\nfunction transformType<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object} = options;\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data, {type, ...options}) => deserialize(data, options)\n });\n\n return types?.get(type)?.deserialize<T>(src, context);\n}\n\n/**\n * Transform given plain object to class.\n * @param src\n * @param options\n */\nexport function plainObjectToClass<T = any>(src: any, options: JsonDeserializerOptions): T {\n if (isEmpty(src)) {\n return src;\n }\n\n const {type, store = JsonEntityStore.from(type), ...next} = options;\n\n const propertiesMap = getProperties(store, {...options, withIgnoredProps: true});\n\n let keys = objectKeys(src);\n const additionalProperties = propertiesMap.size ? !!store.schema.get(\"additionalProperties\") || options.additionalProperties : true;\n src = alterBeforeDeserialize(src, store.schema, options);\n const out: any = new type(src);\n\n propertiesMap.forEach((propStore) => {\n const key = options.useAlias\n ? propStore.parent.schema.getAliasOf(propStore.propertyName) || propStore.propertyName\n : propStore.propertyName;\n\n keys = keys.filter((k) => k !== key);\n\n next.type = propStore.computedType;\n\n if (alterIgnore(propStore.itemSchema, options)) {\n return;\n }\n\n let value = alterValue(propStore.schema, src[key], {...options, self: src});\n\n if (propStore.schema.hasGenerics) {\n next.nestedGenerics = propStore.schema.nestedGenerics;\n } else if (propStore.schema.isGeneric && options.nestedGenerics) {\n const [genericTypes = [], ...nestedGenerics] = options.nestedGenerics;\n const genericLabels = propStore.parent.schema.genericLabels || [];\n\n next.type = genericTypes[genericLabels.indexOf(propStore.schema.genericType)] || Object;\n\n if (next.type instanceof JsonSchema) {\n next.type = next.type.getTarget();\n }\n\n next.nestedGenerics = nestedGenerics;\n }\n\n value = deserialize(value, {\n ...next,\n type: value === src[key] ? next.type : undefined,\n collectionType: propStore.collectionType\n });\n\n if (value !== undefined) {\n out[propStore.propertyName] = value;\n }\n });\n\n if (additionalProperties) {\n keys.forEach((key) => {\n out[key] = src[key];\n });\n }\n\n return alterAfterDeserialize(out, store.schema, options);\n}\n\nfunction buildOptions(options: JsonDeserializerOptions<any, any>): any {\n if (options.store instanceof JsonEntityStore) {\n if (options.store.parameter && options.store.parameter.nestedGenerics.length) {\n options.nestedGenerics = options.store.parameter.nestedGenerics;\n }\n\n options.type = options.store.computedType;\n options.collectionType = options.store.collectionType;\n\n delete options.store;\n }\n\n return {\n groups: false,\n useAlias: true,\n ...options,\n type: options.type ? options.type : undefined,\n types: options.types ? options.types : getJsonMapperTypes()\n };\n}\n\n/**\n * Transform given source to class base on the given `options.type`.\n *\n * @param src\n * @param options\n */\nexport function deserialize<T = any>(src: any, options: JsonDeserializerOptions = {}): T {\n options = buildOptions(options);\n\n if (!isDeserializable(src, options)) {\n return src;\n }\n\n if (!options.collectionType && isArray(src)) {\n options.collectionType = Array;\n }\n\n if (options.collectionType) {\n if (!options.types?.has(options.collectionType)) {\n throw new Error(`${nameOf(options.collectionType)} is not supported by JsonMapper.`);\n }\n\n return transformCollection(src, options);\n }\n\n if (options.types?.has(options.type)) {\n return transformType(src, options);\n }\n\n // class converter\n return plainObjectToClass(src, options);\n}\n","import {\n classOf,\n isArray,\n isClass,\n isClassObject,\n isCollection,\n isEmpty,\n isFunction,\n isNil,\n MetadataTypes,\n objectKeys,\n Type\n} from \"@tsed/core\";\nimport {alterIgnore, getPropertiesStores, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonSerializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: Map<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n\n [key: string]: any;\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onSerialize\", value, [options]);\n}\n\nfunction getSchemaProperties(storedJson: JsonEntityStore, obj: any) {\n const stores = Array.from(getPropertiesStores(storedJson).entries());\n\n if (!stores.length) {\n // fallback to auto discovering field from obj\n objectKeys(obj).forEach((key) => {\n const propStore = JsonEntityStore.from(classOf(storedJson.target), key);\n stores.push([key, propStore]);\n });\n }\n\n return stores;\n}\n\nfunction getObjectProperties(obj: any): [string, any][] {\n return Object.entries(obj).filter(([, value]) => !isFunction(value));\n}\n\nfunction getType(propStore: JsonEntityStore, value: any) {\n if (isNil(value) || propStore.type === Object || isCollection(propStore.type)) {\n return undefined;\n }\n\n return propStore.type;\n}\n\nexport function classToPlainObject(obj: any, options: JsonSerializerOptions<any, any>) {\n const {useAlias = true, type, ...props} = options;\n\n const entity = JsonEntityStore.from(type || obj);\n\n return getSchemaProperties(entity, obj).reduce((newObj, [key, propStore]) => {\n const schema = propStore.schema;\n\n if (alterIgnore(schema, {useAlias, ...props, self: obj})) {\n return newObj;\n }\n\n let value = alterValue(schema, obj[key], {useAlias, ...props, self: obj});\n value = serialize(value, {\n useAlias,\n type: value === obj[key] ? getType(propStore, value) : undefined,\n collectionType: propStore.collectionType,\n ...props\n });\n\n if (value === undefined) {\n return newObj;\n }\n\n key = useAlias ? propStore.parent.schema.getAliasOf(key) || key : key;\n\n return {\n ...newObj,\n [key]: value\n };\n }, {});\n}\n\nfunction toObject(obj: any, options: JsonSerializerOptions): any {\n return getObjectProperties(obj).reduce(\n (newObj, [key, value]) => ({\n ...newObj,\n [key]: serialize(value, options)\n }),\n {}\n );\n}\n\nexport function serialize(obj: any, {type, collectionType, groups = false, ...options}: JsonSerializerOptions = {}): any {\n const types = options.types ? options.types : getJsonMapperTypes();\n // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type\n type = type === Object ? undefined : type;\n\n options.groups = groups;\n\n if (isEmpty(obj)) {\n return obj;\n }\n\n // FIX custom serialization function from @tsed/mongoose and bson\n if ((typeof obj.toJSON === \"function\" && obj.$isMongooseModelPrototype) || obj._bsontype) {\n return obj.toJSON(options);\n }\n\n if (typeof obj.toJSON === \"function\") {\n return serialize(obj.toJSON(), {...options, type: classOf(obj)});\n }\n\n if (type && isClass(type)) {\n options.type = type;\n }\n\n if (isCollection(obj) && !options.collectionType) {\n type = classOf(obj);\n options.collectionType = type;\n }\n\n type = classOf(type || obj);\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data) =>\n serialize(data, {\n ...options,\n collectionType: undefined,\n type: options.type\n })\n });\n\n if (types.has(type)) {\n const jsonMapper = types.get(type)!;\n\n return jsonMapper.serialize(obj, context);\n }\n\n if (isArray(obj)) {\n // Serialize Array class like\n return types.get(Array)?.serialize(obj, context);\n }\n\n return !isClassObject(classOf(type)) ? classToPlainObject(obj, options) : toObject(obj, options);\n}\n"],"names":["JsonMapperTypesContainer","Map","registerJsonTypeMapper","type","token","set","getJsonMapperTypes","JsonMapper","types","target","forEach","ArrayMapper","deserialize","data","options","concat","map","item","next","serialize","Array","DateMapper","isBoolean","undefined","Date","object","toISOString","MapMapper","ctx","obj","objectKeys","key","value","PrimitiveMapper","String","Number","includes","n","isNaN","BadRequest","Boolean","SetMapper","Set","add","array","push","SymbolMapper","Symbol","for","toString","replace","OnDeserialize","cb","JsonEntityFn","storedJson","schema","$hooks","on","OnSerialize","AfterDeserialize","BeforeDeserialize","JsonMapperContext","constructor","collectionType","isCollection","_next","alterAfterDeserialize","alter","alterBeforeDeserialize","isDeserializable","isNil","isEmpty","Object","alterValue","transformCollection","src","context","get","transformType","plainObjectToClass","store","JsonEntityStore","from","propertiesMap","getProperties","withIgnoredProps","keys","additionalProperties","size","out","propStore","useAlias","parent","getAliasOf","propertyName","filter","k","computedType","alterIgnore","itemSchema","self","hasGenerics","nestedGenerics","isGeneric","genericTypes","genericLabels","indexOf","genericType","JsonSchema","getTarget","buildOptions","parameter","length","groups","isArray","has","Error","nameOf","getSchemaProperties","stores","getPropertiesStores","entries","classOf","getObjectProperties","isFunction","getType","classToPlainObject","props","entity","reduce","newObj","toObject","toJSON","$isMongooseModelPrototype","_bsontype","isClass","jsonMapper","isClassObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/domain/JsonMapperTypesContainer.ts","../src/decorators/jsonMapper.ts","../src/components/ArrayMapper.ts","../src/components/DateMapper.ts","../src/components/MapMapper.ts","../src/components/PrimitiveMapper.ts","../src/components/SetMapper.ts","../src/components/SymbolMapper.ts","../src/decorators/onDeserialize.ts","../src/decorators/onSerialize.ts","../src/decorators/afterDeserialize.ts","../src/decorators/beforeDeserialize.ts","../src/domain/JsonMapperContext.ts","../src/hooks/alterAfterDeserialize.ts","../src/hooks/alterBeforeDeserialize.ts","../src/utils/deserialize.ts","../src/utils/serialize.ts"],"sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nconst JsonMapperTypesContainer: Map<Type<any> | Symbol, JsonMapperMethods> = new Map();\n/**\n * @ignore\n */\nexport function registerJsonTypeMapper(type: Type<any>, token: Type<JsonMapperMethods>) {\n JsonMapperTypesContainer.set(type, new token());\n}\n/**\n * @ignore\n */\nexport function getJsonMapperTypes(): WeakMap<Type<any> | Symbol, JsonMapperMethods> {\n return JsonMapperTypesContainer;\n}\n","import {Type} from \"@tsed/core\";\nimport {registerJsonTypeMapper} from \"../domain/JsonMapperTypesContainer\";\n\n/**\n * Register a new JsonMapper Type\n * @param types\n * @constructor\n */\nexport function JsonMapper(...types: (any | Type)[]): ClassDecorator {\n return (target) => {\n types.forEach((type) => {\n registerJsonTypeMapper(type, target as any);\n });\n };\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Array` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Array)\nexport class ArrayMapper implements JsonMapperMethods {\n deserialize<T = any>(data: any, options: JsonMapperCtx): T[] {\n return [].concat(data).map((item) => options.next(item));\n }\n\n serialize(data: any[], options: JsonMapperCtx): any {\n return [].concat(data as any).map((item) => options.next(item));\n }\n}\n","import {isBoolean} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Date` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Date)\nexport class DateMapper implements JsonMapperMethods {\n deserialize(data: string | number): Date;\n deserialize(data: boolean | null | undefined): boolean | null | undefined;\n deserialize(data: any): any {\n // don't convert unexpected data. In normal case, Ajv reject unexpected data.\n // But by default, we have to skip data deserialization and let user to apply\n // the right mapping\n if (isBoolean(data) || data === null || data === undefined) {\n return data;\n }\n\n return new Date(data);\n }\n\n serialize(object: Date): any {\n return new Date(object).toISOString();\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for `Map` type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Map)\nexport class MapMapper implements JsonMapperMethods {\n deserialize<T = any, C = Map<string, T>>(data: {[key: string]: any}, ctx: JsonMapperCtx<T, C>): Map<string, T> {\n const obj = new Map<string, T>();\n\n objectKeys(data).forEach((key) => {\n obj.set(key, ctx.next(data[key]) as T);\n });\n\n return obj;\n }\n\n serialize<T>(data: Map<string, T>, ctx: JsonMapperCtx): any {\n const obj: any = {};\n\n data.forEach((value: T, key: string) => (obj[key] = ctx.next(value)));\n\n return obj;\n }\n}\n","import {BadRequest} from \"@tsed/exceptions\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `String`, `Number` and `Boolean` types.\n * @jsonmapper\n * @component\n */\n@JsonMapper(String, Number, Boolean)\nexport class PrimitiveMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): string | number | boolean | void | null {\n switch (ctx.type) {\n case String:\n return data === null ? null : \"\" + data;\n\n case Number:\n if ([null, \"null\"].includes(data)) return null;\n\n const n = +data;\n\n if (isNaN(n)) {\n throw new BadRequest(\"Cast error. Expression value is not a number.\");\n }\n\n return n;\n\n case Boolean:\n if ([\"true\", \"1\", true].includes(data)) return true;\n if ([\"false\", \"0\", false].includes(data)) return false;\n if ([null, \"null\"].includes(data)) return null;\n if (data === undefined) return undefined;\n\n return !!data;\n }\n }\n\n serialize(object: string | number | boolean): string | number | boolean {\n return object;\n }\n}\n","import {objectKeys} from \"@tsed/core\";\nimport {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperCtx, JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Set` Type.\n * @jsonmapper\n * @component\n */\n@JsonMapper(Set)\nexport class SetMapper implements JsonMapperMethods {\n deserialize<T>(data: any, ctx: JsonMapperCtx): Set<T> {\n const obj = new Set<T>();\n\n objectKeys(data).forEach((key) => {\n obj.add(ctx.next(data[key]));\n });\n\n return obj;\n }\n\n serialize<T>(data: Set<T>, ctx: JsonMapperCtx): any[] {\n const array: any[] = [];\n\n data.forEach((value) => array.push(ctx.next(value)));\n\n return array;\n }\n}\n","import {JsonMapper} from \"../decorators/jsonMapper\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\n/**\n * Mapper for the `Symbol` type.\n *\n * @jsonmapper\n * @component\n */\n@JsonMapper(Symbol)\nexport class SymbolMapper implements JsonMapperMethods {\n deserialize(data: string): symbol {\n return Symbol.for(data);\n }\n\n serialize(object: Symbol): any {\n return object.toString().replace(\"Symbol(\", \"\").replace(\")\", \"\");\n }\n}\n","import {JsonHookContext, JsonEntityFn} from \"@tsed/schema\";\n\nexport interface OnDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property deserialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnDeserialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnDeserialize(cb: OnDeserializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface OnSerializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before property serialization.\n *\n * ## Example\n *\n * ```typescript\n * class Model {\n * @OnSerialize(v => v + 1)\n * property: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function OnSerialize(cb: OnSerializeCallback): PropertyDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"onSerialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface AfterDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function after JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @AfterDeserialize((data: Model) => { // After deserialize get the instance class\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function AfterDeserialize(cb: AfterDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"afterDeserialize\", cb);\n });\n}\n","import {JsonEntityFn, JsonHookContext} from \"@tsed/schema\";\n\nexport interface BeforeDeserializeCallback {\n (value: any, ctx: JsonHookContext): any;\n}\n\n/**\n * Call the function before JsonMapper.\n *\n * ## Example\n *\n * ```typescript\n * @BeforeDeserialize((data: Record<string, unknown>) => { // Before deserialize get the data\n * if (data.prop1 === 'VALUE' && data.prop2 !== 'VALUE2') {\n * throw BadRequest('MyMessage'); // or throw a ValidationError\n * } else {\n * data.prop2 = 'VALUE2';\n * return data;\n * }\n * })\n * class Model {\n * @Property()\n * prop1: string;\n * @Property()\n * prop2: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @schema\n * @property\n * @param cb\n */\nexport function BeforeDeserialize(cb: BeforeDeserializeCallback): ClassDecorator {\n return JsonEntityFn((storedJson) => {\n storedJson.schema.$hooks.on(\"beforeDeserialize\", cb);\n });\n}\n","import {isCollection, Type} from \"@tsed/core\";\nimport {JsonMapperCtx} from \"../interfaces/JsonMapperMethods\";\n/**\n * @ignore\n */\nexport interface JsonMapperContextProps extends Partial<Omit<JsonMapperCtx, \"next\">> {\n next: (data: any, options: any) => void;\n options: any;\n}\n/**\n * @ignore\n */\nexport class JsonMapperContext implements JsonMapperCtx {\n readonly collectionType: Type<any> | undefined;\n readonly type: Type<any> | any;\n readonly options: any;\n private _next: (data: any, options: any) => void;\n\n constructor({type, collectionType, next, options}: JsonMapperContextProps) {\n this.type = type;\n this.collectionType = isCollection(collectionType) ? collectionType : undefined;\n this._next = next;\n this.options = options;\n }\n\n next(data: any) {\n return this._next(data, {\n ...this.options,\n type: this.type\n });\n }\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterAfterDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"afterDeserialize\", data, [options]);\n}\n","import {Hooks} from \"@tsed/core\";\n\nexport function alterBeforeDeserialize(data: any, schema: {$hooks: Hooks}, options: any) {\n return schema?.$hooks?.alter(\"beforeDeserialize\", data, [options]);\n}\n","import {isArray, isEmpty, isNil, MetadataTypes, nameOf, objectKeys, Type} from \"@tsed/core\";\nimport {alterIgnore, getProperties, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {alterAfterDeserialize} from \"../hooks/alterAfterDeserialize\";\nimport {alterBeforeDeserialize} from \"../hooks/alterBeforeDeserialize\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonDeserializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: WeakMap<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n /**\n * Accept additionalProperties or ignore it\n */\n additionalProperties?: boolean;\n /**\n * Use the store which have all metadata to deserialize correctly the model. This\n * property is useful when you deal with metadata parameters.\n */\n store?: JsonEntityStore;\n /**\n *\n */\n groups?: string[] | false;\n\n [key: string]: any;\n}\n\nfunction isDeserializable(obj: any, options: JsonDeserializerOptions) {\n if ((!!options.collectionType && isNil(obj)) || obj === undefined) {\n return false;\n }\n\n return !(isEmpty(options.type) || (options.type === Object && !options.collectionType));\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onDeserialize\", value, [options]);\n}\n\nfunction transformCollection<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object, collectionType} = options;\n\n const context = new JsonMapperContext({\n type,\n collectionType,\n options,\n next: (data, {collectionType, ...options}) => deserialize(data, options)\n });\n\n return types?.get(options.collectionType)?.deserialize<T>(src, context);\n}\n\nfunction transformType<T = any>(src: any, options: JsonDeserializerOptions<any, any>): T {\n const {types, type = Object} = options;\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data, {type, ...options}) => deserialize(data, options)\n });\n\n return types?.get(type)?.deserialize<T>(src, context);\n}\n\n/**\n * Transform given plain object to class.\n * @param src\n * @param options\n */\nexport function plainObjectToClass<T = any>(src: any, options: JsonDeserializerOptions): T {\n if (isEmpty(src)) {\n return src;\n }\n\n const {type, store = JsonEntityStore.from(type), ...next} = options;\n\n const propertiesMap = getProperties(store, {...options, withIgnoredProps: true});\n\n let keys = objectKeys(src);\n const additionalProperties = propertiesMap.size ? !!store.schema.get(\"additionalProperties\") || options.additionalProperties : true;\n src = alterBeforeDeserialize(src, store.schema, options);\n const out: any = new type(src);\n\n propertiesMap.forEach((propStore) => {\n const key = options.useAlias\n ? propStore.parent.schema.getAliasOf(propStore.propertyName) || propStore.propertyName\n : propStore.propertyName;\n\n keys = keys.filter((k) => k !== key);\n\n next.type = propStore.computedType;\n\n if (alterIgnore(propStore.itemSchema, options)) {\n return;\n }\n\n let value = alterValue(propStore.schema, src[key], {...options, self: src});\n\n if (propStore.schema.hasGenerics) {\n next.nestedGenerics = propStore.schema.nestedGenerics;\n } else if (propStore.schema.isGeneric && options.nestedGenerics) {\n const [genericTypes = [], ...nestedGenerics] = options.nestedGenerics;\n const genericLabels = propStore.parent.schema.genericLabels || [];\n\n next.type = genericTypes[genericLabels.indexOf(propStore.schema.genericType)] || Object;\n\n if (next.type instanceof JsonSchema) {\n next.type = next.type.getTarget();\n }\n\n next.nestedGenerics = nestedGenerics;\n }\n\n value = deserialize(value, {\n ...next,\n type: value === src[key] ? next.type : undefined,\n collectionType: propStore.collectionType\n });\n\n if (value !== undefined) {\n out[propStore.propertyName] = value;\n }\n });\n\n if (additionalProperties) {\n keys.forEach((key) => {\n out[key] = src[key];\n });\n }\n\n return alterAfterDeserialize(out, store.schema, options);\n}\n\nfunction buildOptions(options: JsonDeserializerOptions<any, any>): any {\n if (options.store instanceof JsonEntityStore) {\n if (options.store.parameter && options.store.parameter.nestedGenerics.length) {\n options.nestedGenerics = options.store.parameter.nestedGenerics;\n }\n\n options.type = options.store.computedType;\n options.collectionType = options.store.collectionType;\n\n delete options.store;\n }\n\n return {\n groups: false,\n useAlias: true,\n ...options,\n type: options.type ? options.type : undefined,\n types: options.types ? options.types : getJsonMapperTypes()\n };\n}\n\n/**\n * Transform given source to class base on the given `options.type`.\n *\n * @param src\n * @param options\n */\nexport function deserialize<T = any>(src: any, options: JsonDeserializerOptions = {}): T {\n options = buildOptions(options);\n\n if (!isDeserializable(src, options)) {\n return src;\n }\n\n if (!options.collectionType && isArray(src)) {\n options.collectionType = Array;\n }\n\n if (options.collectionType) {\n if (!options.types?.has(options.collectionType)) {\n throw new Error(`${nameOf(options.collectionType)} is not supported by JsonMapper.`);\n }\n\n return transformCollection(src, options);\n }\n\n if (options.types?.has(options.type)) {\n return transformType(src, options);\n }\n\n // class converter\n return plainObjectToClass(src, options);\n}\n","import {\n classOf,\n isArray,\n isClass,\n isClassObject,\n isCollection,\n isEmpty,\n isFunction,\n isNil,\n MetadataTypes,\n objectKeys,\n Type\n} from \"@tsed/core\";\nimport {alterIgnore, getPropertiesStores, JsonEntityStore, JsonHookContext, JsonSchema} from \"@tsed/schema\";\nimport \"../components\";\nimport {JsonMapperContext} from \"../domain/JsonMapperContext\";\nimport {getJsonMapperTypes} from \"../domain/JsonMapperTypesContainer\";\nimport {JsonMapperMethods} from \"../interfaces/JsonMapperMethods\";\n\nexport interface JsonSerializerOptions<T = any, C = any> extends MetadataTypes<T, C> {\n /**\n * Types used to map complex types (Symbol, Array, Set, Map)\n */\n types?: Map<Type<any>, JsonMapperMethods>;\n /**\n * useAlias mapping\n */\n useAlias?: boolean;\n\n [key: string]: any;\n}\n\nfunction alterValue(schema: JsonSchema, value: any, options: JsonHookContext) {\n return schema.$hooks.alter(\"onSerialize\", value, [options]);\n}\n\nfunction getSchemaProperties(storedJson: JsonEntityStore, obj: any) {\n const stores = Array.from(getPropertiesStores(storedJson).entries());\n\n if (!stores.length) {\n // fallback to auto discovering field from obj\n objectKeys(obj).forEach((key) => {\n const propStore = JsonEntityStore.from(classOf(storedJson.target), key);\n stores.push([key, propStore]);\n });\n }\n\n return stores;\n}\n\nfunction getObjectProperties(obj: any): [string, any][] {\n return Object.entries(obj).filter(([, value]) => !isFunction(value));\n}\n\nfunction getType(propStore: JsonEntityStore, value: any) {\n if (isNil(value) || propStore.type === Object || isCollection(propStore.type)) {\n return undefined;\n }\n\n return propStore.type;\n}\n\nexport function classToPlainObject(obj: any, options: JsonSerializerOptions<any, any>) {\n const {useAlias = true, type, ...props} = options;\n\n const entity = JsonEntityStore.from(type || obj);\n\n return getSchemaProperties(entity, obj).reduce((newObj, [key, propStore]) => {\n const schema = propStore.schema;\n\n if (alterIgnore(schema, {useAlias, ...props, self: obj})) {\n return newObj;\n }\n\n let value = alterValue(schema, obj[key], {useAlias, ...props, self: obj});\n value = serialize(value, {\n useAlias,\n type: value === obj[key] ? getType(propStore, value) : undefined,\n collectionType: propStore.collectionType,\n ...props\n });\n\n if (value === undefined) {\n return newObj;\n }\n\n key = useAlias ? propStore.parent.schema.getAliasOf(key) || key : key;\n\n return {\n ...newObj,\n [key]: value\n };\n }, {});\n}\n\nfunction toObject(obj: any, options: JsonSerializerOptions): any {\n return getObjectProperties(obj).reduce(\n (newObj, [key, value]) => ({\n ...newObj,\n [key]: serialize(value, options)\n }),\n {}\n );\n}\n\nfunction getBestType(type: Type<any>, obj: any) {\n const dataType = classOf(obj);\n\n return isClass(dataType) ? dataType : type;\n}\n\nexport function serialize(obj: any, {type, collectionType, groups = false, ...options}: JsonSerializerOptions = {}): any {\n if (isEmpty(obj)) {\n return obj;\n }\n\n const types = options.types ? options.types : getJsonMapperTypes();\n options.groups = groups;\n\n // FIX custom serialization function from @tsed/mongoose and bson\n if ((typeof obj.toJSON === \"function\" && obj.$isMongooseModelPrototype) || obj._bsontype) {\n return obj.toJSON(options);\n }\n\n if (typeof obj.toJSON === \"function\") {\n return serialize(obj.toJSON(), {...options, type: classOf(obj)});\n }\n\n // prevent Object metadata assignation. TypeScript set Object by default on endpoint.type\n type = type === Object ? undefined : type;\n\n if (type && isClass(type)) {\n options.type = type = getBestType(type, obj);\n }\n\n if (isCollection(obj) && !options.collectionType) {\n type = classOf(obj);\n options.collectionType = type;\n }\n\n type = classOf(type || obj);\n\n const context = new JsonMapperContext({\n type,\n options,\n next: (data) =>\n serialize(data, {\n ...options,\n collectionType: undefined,\n type: options.type\n })\n });\n\n if (types.has(type)) {\n const jsonMapper = types.get(type)!;\n\n return jsonMapper.serialize(obj, context);\n }\n\n if (isArray(obj)) {\n // Serialize Array class like\n return types.get(Array)?.serialize(obj, context);\n }\n\n return !isClassObject(type) ? classToPlainObject(obj, options) : toObject(obj, options);\n}\n"],"names":["JsonMapperTypesContainer","Map","registerJsonTypeMapper","type","token","set","getJsonMapperTypes","JsonMapper","types","target","forEach","ArrayMapper","deserialize","data","options","concat","map","item","next","serialize","Array","DateMapper","isBoolean","undefined","Date","object","toISOString","MapMapper","ctx","obj","objectKeys","key","value","PrimitiveMapper","String","Number","includes","n","isNaN","BadRequest","Boolean","SetMapper","Set","add","array","push","SymbolMapper","Symbol","for","toString","replace","OnDeserialize","cb","JsonEntityFn","storedJson","schema","$hooks","on","OnSerialize","AfterDeserialize","BeforeDeserialize","JsonMapperContext","constructor","collectionType","isCollection","_next","alterAfterDeserialize","alter","alterBeforeDeserialize","isDeserializable","isNil","isEmpty","Object","alterValue","transformCollection","src","context","get","transformType","plainObjectToClass","store","JsonEntityStore","from","propertiesMap","getProperties","withIgnoredProps","keys","additionalProperties","size","out","propStore","useAlias","parent","getAliasOf","propertyName","filter","k","computedType","alterIgnore","itemSchema","self","hasGenerics","nestedGenerics","isGeneric","genericTypes","genericLabels","indexOf","genericType","JsonSchema","getTarget","buildOptions","parameter","length","groups","isArray","has","Error","nameOf","getSchemaProperties","stores","getPropertiesStores","entries","classOf","getObjectProperties","isFunction","getType","classToPlainObject","props","entity","reduce","newObj","toObject","getBestType","dataType","isClass","toJSON","$isMongooseModelPrototype","_bsontype","jsonMapper","isClassObject"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsed/json-mapper",
3
- "version": "6.75.2",
3
+ "version": "6.75.3",
4
4
  "description": "Json mapper module for Ts.ED Framework",
5
5
  "private": false,
6
6
  "source": "./src/index.ts",
@@ -29,14 +29,14 @@
29
29
  "tslib": "2.2.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@tsed/core": "6.75.2",
33
- "@tsed/exceptions": "6.75.2",
34
- "@tsed/schema": "6.75.2"
32
+ "@tsed/core": "6.75.3",
33
+ "@tsed/exceptions": "6.75.3",
34
+ "@tsed/schema": "6.75.3"
35
35
  },
36
36
  "peerDependencies": {
37
- "@tsed/core": "^6.75.2",
38
- "@tsed/exceptions": "^6.75.2",
39
- "@tsed/schema": "^6.75.2"
37
+ "@tsed/core": "^6.75.3",
38
+ "@tsed/exceptions": "^6.75.3",
39
+ "@tsed/schema": "^6.75.3"
40
40
  },
41
41
  "repository": "https://github.com/tsedio/tsed",
42
42
  "bugs": {