@cratis/fundamentals 7.15.0 → 7.15.1

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.
Files changed (237) hide show
  1. package/JsonSerializer.ts +88 -56
  2. package/dist/JsonSerializer.d.ts.map +1 -1
  3. package/dist/JsonSerializer.js +50 -54
  4. package/dist/JsonSerializer.js.map +1 -1
  5. package/dist/cjs/JsonSerializer.d.ts.map +1 -1
  6. package/dist/cjs/JsonSerializer.js +56 -54
  7. package/dist/cjs/JsonSerializer.js.map +1 -1
  8. package/dist/cjs/geospatial/LineString.d.ts +7 -0
  9. package/dist/cjs/geospatial/LineString.d.ts.map +1 -0
  10. package/dist/cjs/geospatial/LineString.js +20 -0
  11. package/dist/cjs/geospatial/LineString.js.map +1 -0
  12. package/dist/cjs/geospatial/LinearRing.d.ts +7 -0
  13. package/dist/cjs/geospatial/LinearRing.d.ts.map +1 -0
  14. package/dist/cjs/geospatial/LinearRing.js +17 -0
  15. package/dist/cjs/geospatial/LinearRing.js.map +1 -0
  16. package/dist/cjs/geospatial/Point.d.ts +7 -0
  17. package/dist/cjs/geospatial/Point.d.ts.map +1 -0
  18. package/dist/cjs/geospatial/Point.js +30 -0
  19. package/dist/cjs/geospatial/Point.js.map +1 -0
  20. package/dist/cjs/geospatial/Polygon.d.ts +8 -0
  21. package/dist/cjs/geospatial/Polygon.d.ts.map +1 -0
  22. package/dist/cjs/geospatial/Polygon.js +23 -0
  23. package/dist/cjs/geospatial/Polygon.js.map +1 -0
  24. package/dist/cjs/geospatial/index.d.ts +5 -0
  25. package/dist/cjs/geospatial/index.d.ts.map +1 -0
  26. package/dist/cjs/index.d.ts +2 -1
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +24 -2
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/json/DateJsonConverter.d.ts +8 -0
  31. package/dist/cjs/json/DateJsonConverter.d.ts.map +1 -0
  32. package/dist/cjs/json/DateJsonConverter.js +18 -0
  33. package/dist/cjs/json/DateJsonConverter.js.map +1 -0
  34. package/dist/cjs/json/GuidJsonConverter.d.ts +9 -0
  35. package/dist/cjs/json/GuidJsonConverter.d.ts.map +1 -0
  36. package/dist/cjs/json/GuidJsonConverter.js +19 -0
  37. package/dist/cjs/json/GuidJsonConverter.js.map +1 -0
  38. package/dist/cjs/json/JsonConverter.d.ts +8 -0
  39. package/dist/cjs/json/JsonConverter.d.ts.map +1 -0
  40. package/dist/cjs/json/JsonConverter.js +10 -0
  41. package/dist/cjs/json/JsonConverter.js.map +1 -0
  42. package/dist/cjs/json/LineStringJsonConverter.d.ts +9 -0
  43. package/dist/cjs/json/LineStringJsonConverter.d.ts.map +1 -0
  44. package/dist/cjs/json/LineStringJsonConverter.js +27 -0
  45. package/dist/cjs/json/LineStringJsonConverter.js.map +1 -0
  46. package/dist/cjs/json/PointJsonConverter.d.ts +9 -0
  47. package/dist/cjs/json/PointJsonConverter.d.ts.map +1 -0
  48. package/dist/cjs/json/PointJsonConverter.js +25 -0
  49. package/dist/cjs/json/PointJsonConverter.js.map +1 -0
  50. package/dist/cjs/json/PolygonJsonConverter.d.ts +9 -0
  51. package/dist/cjs/json/PolygonJsonConverter.d.ts.map +1 -0
  52. package/dist/cjs/json/PolygonJsonConverter.js +29 -0
  53. package/dist/cjs/json/PolygonJsonConverter.js.map +1 -0
  54. package/dist/cjs/json/TimeSpanJsonConverter.d.ts +9 -0
  55. package/dist/cjs/json/TimeSpanJsonConverter.d.ts.map +1 -0
  56. package/dist/cjs/json/TimeSpanJsonConverter.js +19 -0
  57. package/dist/cjs/json/TimeSpanJsonConverter.js.map +1 -0
  58. package/dist/cjs/json/ValueMapJsonConverter.d.ts +12 -0
  59. package/dist/cjs/json/ValueMapJsonConverter.d.ts.map +1 -0
  60. package/dist/cjs/json/ValueMapJsonConverter.js +33 -0
  61. package/dist/cjs/json/ValueMapJsonConverter.js.map +1 -0
  62. package/dist/cjs/json/index.d.ts +9 -0
  63. package/dist/cjs/json/index.d.ts.map +1 -0
  64. package/dist/esm/JsonSerializer.d.ts.map +1 -1
  65. package/dist/esm/JsonSerializer.js +56 -54
  66. package/dist/esm/JsonSerializer.js.map +1 -1
  67. package/dist/esm/geospatial/LineString.d.ts +7 -0
  68. package/dist/esm/geospatial/LineString.d.ts.map +1 -0
  69. package/dist/esm/geospatial/LineString.js +18 -0
  70. package/dist/esm/geospatial/LineString.js.map +1 -0
  71. package/dist/esm/geospatial/LinearRing.d.ts +7 -0
  72. package/dist/esm/geospatial/LinearRing.d.ts.map +1 -0
  73. package/dist/esm/geospatial/LinearRing.js +15 -0
  74. package/dist/esm/geospatial/LinearRing.js.map +1 -0
  75. package/dist/esm/geospatial/Point.d.ts +7 -0
  76. package/dist/esm/geospatial/Point.d.ts.map +1 -0
  77. package/dist/esm/geospatial/Point.js +28 -0
  78. package/dist/esm/geospatial/Point.js.map +1 -0
  79. package/dist/esm/geospatial/Polygon.d.ts +8 -0
  80. package/dist/esm/geospatial/Polygon.d.ts.map +1 -0
  81. package/dist/esm/geospatial/Polygon.js +21 -0
  82. package/dist/esm/geospatial/Polygon.js.map +1 -0
  83. package/dist/esm/geospatial/index.d.ts +5 -0
  84. package/dist/esm/geospatial/index.d.ts.map +1 -0
  85. package/dist/esm/index.d.ts +2 -1
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js +12 -1
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/json/DateJsonConverter.d.ts +8 -0
  90. package/dist/esm/json/DateJsonConverter.d.ts.map +1 -0
  91. package/dist/esm/json/DateJsonConverter.js +16 -0
  92. package/dist/esm/json/DateJsonConverter.js.map +1 -0
  93. package/dist/esm/json/GuidJsonConverter.d.ts +9 -0
  94. package/dist/esm/json/GuidJsonConverter.d.ts.map +1 -0
  95. package/dist/esm/json/GuidJsonConverter.js +17 -0
  96. package/dist/esm/json/GuidJsonConverter.js.map +1 -0
  97. package/dist/esm/json/JsonConverter.d.ts +8 -0
  98. package/dist/esm/json/JsonConverter.d.ts.map +1 -0
  99. package/dist/esm/json/JsonConverter.js +8 -0
  100. package/dist/esm/json/JsonConverter.js.map +1 -0
  101. package/dist/esm/json/LineStringJsonConverter.d.ts +9 -0
  102. package/dist/esm/json/LineStringJsonConverter.d.ts.map +1 -0
  103. package/dist/esm/json/LineStringJsonConverter.js +25 -0
  104. package/dist/esm/json/LineStringJsonConverter.js.map +1 -0
  105. package/dist/esm/json/PointJsonConverter.d.ts +9 -0
  106. package/dist/esm/json/PointJsonConverter.d.ts.map +1 -0
  107. package/dist/esm/json/PointJsonConverter.js +23 -0
  108. package/dist/esm/json/PointJsonConverter.js.map +1 -0
  109. package/dist/esm/json/PolygonJsonConverter.d.ts +9 -0
  110. package/dist/esm/json/PolygonJsonConverter.d.ts.map +1 -0
  111. package/dist/esm/json/PolygonJsonConverter.js +27 -0
  112. package/dist/esm/json/PolygonJsonConverter.js.map +1 -0
  113. package/dist/esm/json/TimeSpanJsonConverter.d.ts +9 -0
  114. package/dist/esm/json/TimeSpanJsonConverter.d.ts.map +1 -0
  115. package/dist/esm/json/TimeSpanJsonConverter.js +17 -0
  116. package/dist/esm/json/TimeSpanJsonConverter.js.map +1 -0
  117. package/dist/esm/json/ValueMapJsonConverter.d.ts +12 -0
  118. package/dist/esm/json/ValueMapJsonConverter.d.ts.map +1 -0
  119. package/dist/esm/json/ValueMapJsonConverter.js +31 -0
  120. package/dist/esm/json/ValueMapJsonConverter.js.map +1 -0
  121. package/dist/esm/json/index.d.ts +9 -0
  122. package/dist/esm/json/index.d.ts.map +1 -0
  123. package/dist/geospatial/LineString.d.ts +7 -0
  124. package/dist/geospatial/LineString.d.ts.map +1 -0
  125. package/dist/geospatial/LineString.js +16 -0
  126. package/dist/geospatial/LineString.js.map +1 -0
  127. package/dist/geospatial/LinearRing.d.ts +7 -0
  128. package/dist/geospatial/LinearRing.d.ts.map +1 -0
  129. package/dist/geospatial/LinearRing.js +13 -0
  130. package/dist/geospatial/LinearRing.js.map +1 -0
  131. package/dist/geospatial/Point.d.ts +7 -0
  132. package/dist/geospatial/Point.d.ts.map +1 -0
  133. package/dist/geospatial/Point.js +25 -0
  134. package/dist/geospatial/Point.js.map +1 -0
  135. package/dist/geospatial/Polygon.d.ts +8 -0
  136. package/dist/geospatial/Polygon.d.ts.map +1 -0
  137. package/dist/geospatial/Polygon.js +19 -0
  138. package/dist/geospatial/Polygon.js.map +1 -0
  139. package/dist/geospatial/index.d.ts +5 -0
  140. package/dist/geospatial/index.d.ts.map +1 -0
  141. package/dist/geospatial/index.js +5 -0
  142. package/dist/geospatial/index.js.map +1 -0
  143. package/dist/index.d.ts +2 -1
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +2 -1
  146. package/dist/index.js.map +1 -1
  147. package/dist/json/DateJsonConverter.d.ts +8 -0
  148. package/dist/json/DateJsonConverter.d.ts.map +1 -0
  149. package/dist/json/DateJsonConverter.js +13 -0
  150. package/dist/json/DateJsonConverter.js.map +1 -0
  151. package/dist/json/GuidJsonConverter.d.ts +9 -0
  152. package/dist/json/GuidJsonConverter.d.ts.map +1 -0
  153. package/dist/json/GuidJsonConverter.js +14 -0
  154. package/dist/json/GuidJsonConverter.js.map +1 -0
  155. package/dist/json/JsonConverter.d.ts +8 -0
  156. package/dist/json/JsonConverter.d.ts.map +1 -0
  157. package/dist/json/JsonConverter.js +6 -0
  158. package/dist/json/JsonConverter.js.map +1 -0
  159. package/dist/json/LineStringJsonConverter.d.ts +9 -0
  160. package/dist/json/LineStringJsonConverter.d.ts.map +1 -0
  161. package/dist/json/LineStringJsonConverter.js +21 -0
  162. package/dist/json/LineStringJsonConverter.js.map +1 -0
  163. package/dist/json/PointJsonConverter.d.ts +9 -0
  164. package/dist/json/PointJsonConverter.d.ts.map +1 -0
  165. package/dist/json/PointJsonConverter.js +20 -0
  166. package/dist/json/PointJsonConverter.js.map +1 -0
  167. package/dist/json/PolygonJsonConverter.d.ts +9 -0
  168. package/dist/json/PolygonJsonConverter.d.ts.map +1 -0
  169. package/dist/json/PolygonJsonConverter.js +22 -0
  170. package/dist/json/PolygonJsonConverter.js.map +1 -0
  171. package/dist/json/TimeSpanJsonConverter.d.ts +9 -0
  172. package/dist/json/TimeSpanJsonConverter.d.ts.map +1 -0
  173. package/dist/json/TimeSpanJsonConverter.js +14 -0
  174. package/dist/json/TimeSpanJsonConverter.js.map +1 -0
  175. package/dist/json/ValueMapJsonConverter.d.ts +12 -0
  176. package/dist/json/ValueMapJsonConverter.d.ts.map +1 -0
  177. package/dist/json/ValueMapJsonConverter.js +28 -0
  178. package/dist/json/ValueMapJsonConverter.js.map +1 -0
  179. package/dist/json/index.d.ts +9 -0
  180. package/dist/json/index.d.ts.map +1 -0
  181. package/dist/json/index.js +9 -0
  182. package/dist/json/index.js.map +1 -0
  183. package/dist/tsconfig.tsbuildinfo +1 -1
  184. package/geospatial/LineString.ts +33 -0
  185. package/geospatial/LinearRing.ts +30 -0
  186. package/geospatial/Point.ts +36 -0
  187. package/geospatial/Polygon.ts +37 -0
  188. package/geospatial/index.ts +7 -0
  189. package/index.ts +2 -1
  190. package/json/DateJsonConverter.ts +27 -0
  191. package/json/GuidJsonConverter.ts +28 -0
  192. package/json/JsonConverter.ts +40 -0
  193. package/json/LineStringJsonConverter.ts +35 -0
  194. package/json/PointJsonConverter.ts +34 -0
  195. package/json/PolygonJsonConverter.ts +38 -0
  196. package/json/TimeSpanJsonConverter.ts +28 -0
  197. package/json/ValueMapJsonConverter.ts +57 -0
  198. package/json/for_DateJsonConverter/when_reading_date_with_date_converter.ts +12 -0
  199. package/json/for_DateJsonConverter/when_writing_date_with_date_converter.ts +12 -0
  200. package/json/for_GuidJsonConverter/when_reading_guid_with_guid_converter.ts +13 -0
  201. package/json/for_GuidJsonConverter/when_writing_guid_with_guid_converter.ts +13 -0
  202. package/json/for_LineStringJsonConverter/when_deserializing_linestring.ts +19 -0
  203. package/json/for_LineStringJsonConverter/when_reading_linestring_with_linestring_converter.ts +24 -0
  204. package/json/for_LineStringJsonConverter/when_serializing_linestring.ts +25 -0
  205. package/json/for_LineStringJsonConverter/when_writing_linestring_with_linestring_converter.ts +27 -0
  206. package/json/for_PointJsonConverter/when_deserializing_point.ts +14 -0
  207. package/json/for_PointJsonConverter/when_reading_point_with_point_converter.ts +14 -0
  208. package/json/for_PointJsonConverter/when_serializing_point.ts +17 -0
  209. package/json/for_PointJsonConverter/when_writing_point_with_point_converter.ts +16 -0
  210. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_holes.ts +28 -0
  211. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_no_holes.ts +22 -0
  212. package/json/for_PolygonJsonConverter/when_reading_polygon_with_polygon_converter.ts +27 -0
  213. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_holes.ts +53 -0
  214. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_no_holes.ts +33 -0
  215. package/json/for_PolygonJsonConverter/when_writing_polygon_with_polygon_converter.ts +35 -0
  216. package/json/for_TimeSpanJsonConverter/when_reading_timespan_with_timespan_converter.ts +16 -0
  217. package/json/for_TimeSpanJsonConverter/when_writing_timespan_with_timespan_converter.ts +13 -0
  218. package/json/for_ValueMapJsonConverter/when_writing_valuemap_with_valuemap_converter.ts +28 -0
  219. package/json/index.ts +11 -0
  220. package/package.json +11 -1
  221. package/Coordinate.ts +0 -38
  222. package/dist/Coordinate.d.ts +0 -7
  223. package/dist/Coordinate.d.ts.map +0 -1
  224. package/dist/Coordinate.js +0 -27
  225. package/dist/Coordinate.js.map +0 -1
  226. package/dist/cjs/Coordinate.d.ts +0 -7
  227. package/dist/cjs/Coordinate.d.ts.map +0 -1
  228. package/dist/cjs/Coordinate.js +0 -32
  229. package/dist/cjs/Coordinate.js.map +0 -1
  230. package/dist/esm/Coordinate.d.ts +0 -7
  231. package/dist/esm/Coordinate.d.ts.map +0 -1
  232. package/dist/esm/Coordinate.js +0 -30
  233. package/dist/esm/Coordinate.js.map +0 -1
  234. package/for_Coordinate/when_creating_coordinate.ts +0 -11
  235. package/for_Coordinate/when_deserializing_coordinate.ts +0 -14
  236. package/for_Coordinate/when_deserializing_coordinate_with_missing_properties.ts +0 -13
  237. package/for_Coordinate/when_serializing_coordinate.ts +0 -14
package/JsonSerializer.ts CHANGED
@@ -3,55 +3,56 @@
3
3
 
4
4
  import { ConceptAs } from './ConceptAs';
5
5
  import { Constructor } from './Constructor';
6
- import { Coordinate } from './Coordinate';
7
6
  import { DerivedType } from './DerivedType';
8
7
  import { Field } from './Field';
9
8
  import { Fields } from './Fields';
10
- import { Guid } from './Guid';
11
- import { TimeSpan } from './TimeSpan';
12
9
  import { ValueMap } from './ValueMap';
10
+ import {
11
+ JsonConverter,
12
+ DateJsonConverter,
13
+ GuidJsonConverter,
14
+ TimeSpanJsonConverter,
15
+ PointJsonConverter,
16
+ LineStringJsonConverter,
17
+ PolygonJsonConverter,
18
+ ValueMapJsonConverter
19
+ } from './json';
13
20
 
14
21
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
22
 
16
23
  type typeSerializer = (value: any) => any;
17
24
 
18
- const typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
25
+ // Initialize converters
26
+ const converters: JsonConverter[] = [
27
+ new DateJsonConverter(),
28
+ new GuidJsonConverter(),
29
+ new TimeSpanJsonConverter(),
30
+ new PointJsonConverter(),
31
+ new LineStringJsonConverter(),
32
+ new PolygonJsonConverter(),
33
+ new ValueMapJsonConverter()
34
+ ];
35
+
36
+ // Build converter maps from the converters
37
+ const typeConverters: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();
38
+ const typeSerializers: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();
39
+
40
+ for (const converter of converters) {
41
+ typeConverters.set(converter.type, converter);
42
+ typeSerializers.set(converter.type, converter);
43
+ }
44
+
45
+ // Add primitive type converters that don't need a full JsonConverter class
46
+ const primitiveConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
19
47
  [Number, (value: number) => value],
20
48
  [String, (value: string) => value],
21
- [Boolean, (value: boolean) => value],
22
- [Date, (value: Date) => value.toISOString()],
23
- [Guid, (value: Guid) => value?.toString() ?? ''],
24
- [TimeSpan, (value: TimeSpan) => value?.toString() ?? ''],
25
- [Coordinate, (value: Coordinate) => value?.toJSON() ?? null],
26
- [ValueMap, (value: ValueMap<any, any>) => {
27
- const converted: any = {};
28
- for (const [key, mapValue] of value.entries()) {
29
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
30
- }
31
-
32
- return converted;
33
- }]
49
+ [Boolean, (value: boolean) => value]
34
50
  ]);
35
51
 
36
- const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
52
+ const primitiveSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
37
53
  [Number, (value: any) => value],
38
54
  [String, (value: any) => value],
39
- [Boolean, (value: any) => value],
40
- [Date, (value: any) => new Date(value)],
41
- [Guid, (value: any) => Guid.parse(value.toString())],
42
- [TimeSpan, (value: any) => TimeSpan.parse(value.toString())],
43
- [Coordinate, (value: any) => {
44
- if (value === null || value === undefined) {
45
- throw new Error('Cannot deserialize null or undefined to Coordinate');
46
- }
47
- if (value.longitude === undefined || value.latitude === undefined) {
48
- throw new Error('Cannot deserialize Coordinate: longitude and latitude are required');
49
- }
50
- const coordinate = new Coordinate();
51
- coordinate.longitude = value.longitude;
52
- coordinate.latitude = value.latitude;
53
- return coordinate;
54
- }],
55
+ [Boolean, (value: any) => value]
55
56
  ]);
56
57
 
57
58
  /**
@@ -86,11 +87,18 @@ const serializeValueForType = (type: Constructor, value: any) => {
86
87
  return serializeValueForType(innerValue.constructor, innerValue);
87
88
  }
88
89
 
90
+ // Check if there's a registered converter
89
91
  if (typeConverters.has(type)) {
90
- return typeConverters.get(type)!(value);
91
- } else {
92
- return convertTypesOnInstance(value);
92
+ const converter = typeConverters.get(type)!;
93
+ return converter.write(value);
93
94
  }
95
+
96
+ // Check primitive converters
97
+ if (primitiveConverters.has(type)) {
98
+ return primitiveConverters.get(type)!(value);
99
+ }
100
+
101
+ return convertTypesOnInstance(value);
94
102
  };
95
103
 
96
104
  const deserializeValueFromType = (type: Constructor, value: any) => {
@@ -99,11 +107,18 @@ const deserializeValueFromType = (type: Constructor, value: any) => {
99
107
  return new type(value);
100
108
  }
101
109
 
110
+ // Check if there's a registered converter
102
111
  if (typeSerializers.has(type)) {
103
- return typeSerializers.get(type)!(value);
104
- } else {
105
- return JsonSerializer.deserialize(type, JSON.stringify(value));
112
+ const converter = typeSerializers.get(type)!;
113
+ return converter.read(value);
106
114
  }
115
+
116
+ // Check primitive serializers
117
+ if (primitiveSerializers.has(type)) {
118
+ return primitiveSerializers.get(type)!(value);
119
+ }
120
+
121
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
107
122
  };
108
123
 
109
124
  const deserializeValueFromField = (field: Field, value: any) => {
@@ -116,18 +131,25 @@ const deserializeValueFromField = (field: Field, value: any) => {
116
131
  return new field.type(value);
117
132
  }
118
133
 
134
+ // Check if there's a registered converter
119
135
  if (typeSerializers.has(field.type)) {
120
- return typeSerializers.get(field.type)!(value);
121
- } else {
122
- let type = field.type;
123
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
124
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
125
- const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
126
- type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
127
- }
128
-
129
- return JsonSerializer.deserialize(type, JSON.stringify(value));
136
+ const converter = typeSerializers.get(field.type)!;
137
+ return converter.read(value);
138
+ }
139
+
140
+ // Check primitive serializers
141
+ if (primitiveSerializers.has(field.type)) {
142
+ return primitiveSerializers.get(field.type)!(value);
143
+ }
144
+
145
+ let type = field.type;
146
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
147
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
148
+ const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
149
+ type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
130
150
  }
151
+
152
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
131
153
  };
132
154
 
133
155
  const serializeMapKey = (key: any): string => {
@@ -163,12 +185,10 @@ const deserializeMapKey = (keyType: Constructor, key: string): any => {
163
185
  return key.toLowerCase() === 'true';
164
186
  }
165
187
 
166
- if (keyType === Date) {
167
- return new Date(key);
168
- }
169
-
188
+ // Check if there's a converter for this type
170
189
  if (typeSerializers.has(keyType)) {
171
- return typeSerializers.get(keyType)!(key);
190
+ const converter = typeSerializers.get(keyType)!;
191
+ return converter.read(key);
172
192
  }
173
193
 
174
194
  return JsonSerializer.deserialize(keyType, key);
@@ -179,8 +199,10 @@ const deserializeMapValue = (valueType: Constructor | undefined, value: any): an
179
199
  return value;
180
200
  }
181
201
 
202
+ // Check if there's a converter for this type
182
203
  if (typeSerializers.has(valueType)) {
183
- return typeSerializers.get(valueType)!(value);
204
+ const converter = typeSerializers.get(valueType)!;
205
+ return converter.read(value);
184
206
  }
185
207
 
186
208
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
@@ -205,9 +227,15 @@ const deserializeValueMapFromField = (field: Field, value: any): ValueMap<any, a
205
227
  };
206
228
 
207
229
  const convertTypesOnInstance = (instance: any) => {
230
+ // Check if there's a converter for this type
208
231
  if (typeConverters.has(instance.constructor)) {
209
232
  return serializeValueForType(instance.constructor, instance);
210
233
  }
234
+
235
+ // Check primitive converters
236
+ if (primitiveConverters.has(instance.constructor)) {
237
+ return primitiveConverters.get(instance.constructor)!(instance);
238
+ }
211
239
 
212
240
  const properties = Object.getOwnPropertyNames(instance);
213
241
  const converted: any = {};
@@ -232,6 +260,10 @@ const convertTypesOnInstance = (instance: any) => {
232
260
  return converted;
233
261
  };
234
262
 
263
+ // Initialize ValueMapJsonConverter with helper functions to avoid circular dependencies
264
+ // Must be done after serializeMapKey and convertTypesOnInstance are defined
265
+ ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
266
+
235
267
  /**
236
268
  * Represents a serializer for JSON.
237
269
  */
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyO5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyQ5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
@@ -1,45 +1,32 @@
1
1
  import { ConceptAs } from './ConceptAs';
2
- import { Coordinate } from './Coordinate';
3
2
  import { DerivedType } from './DerivedType';
4
3
  import { Fields } from './Fields';
5
- import { Guid } from './Guid';
6
- import { TimeSpan } from './TimeSpan';
7
4
  import { ValueMap } from './ValueMap';
8
- const typeConverters = new Map([
5
+ import { DateJsonConverter, GuidJsonConverter, TimeSpanJsonConverter, PointJsonConverter, LineStringJsonConverter, PolygonJsonConverter, ValueMapJsonConverter } from './json';
6
+ const converters = [
7
+ new DateJsonConverter(),
8
+ new GuidJsonConverter(),
9
+ new TimeSpanJsonConverter(),
10
+ new PointJsonConverter(),
11
+ new LineStringJsonConverter(),
12
+ new PolygonJsonConverter(),
13
+ new ValueMapJsonConverter()
14
+ ];
15
+ const typeConverters = new Map();
16
+ const typeSerializers = new Map();
17
+ for (const converter of converters) {
18
+ typeConverters.set(converter.type, converter);
19
+ typeSerializers.set(converter.type, converter);
20
+ }
21
+ const primitiveConverters = new Map([
9
22
  [Number, (value) => value],
10
23
  [String, (value) => value],
11
- [Boolean, (value) => value],
12
- [Date, (value) => value.toISOString()],
13
- [Guid, (value) => value?.toString() ?? ''],
14
- [TimeSpan, (value) => value?.toString() ?? ''],
15
- [Coordinate, (value) => value?.toJSON() ?? null],
16
- [ValueMap, (value) => {
17
- const converted = {};
18
- for (const [key, mapValue] of value.entries()) {
19
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
20
- }
21
- return converted;
22
- }]
24
+ [Boolean, (value) => value]
23
25
  ]);
24
- const typeSerializers = new Map([
26
+ const primitiveSerializers = new Map([
25
27
  [Number, (value) => value],
26
28
  [String, (value) => value],
27
- [Boolean, (value) => value],
28
- [Date, (value) => new Date(value)],
29
- [Guid, (value) => Guid.parse(value.toString())],
30
- [TimeSpan, (value) => TimeSpan.parse(value.toString())],
31
- [Coordinate, (value) => {
32
- if (value === null || value === undefined) {
33
- throw new Error('Cannot deserialize null or undefined to Coordinate');
34
- }
35
- if (value.longitude === undefined || value.latitude === undefined) {
36
- throw new Error('Cannot deserialize Coordinate: longitude and latitude are required');
37
- }
38
- const coordinate = new Coordinate();
39
- coordinate.longitude = value.longitude;
40
- coordinate.latitude = value.latitude;
41
- return coordinate;
42
- }],
29
+ [Boolean, (value) => value]
43
30
  ]);
44
31
  const isConceptAs = (type) => {
45
32
  if (!type || !type.prototype)
@@ -61,22 +48,26 @@ const serializeValueForType = (type, value) => {
61
48
  return serializeValueForType(innerValue.constructor, innerValue);
62
49
  }
63
50
  if (typeConverters.has(type)) {
64
- return typeConverters.get(type)(value);
51
+ const converter = typeConverters.get(type);
52
+ return converter.write(value);
65
53
  }
66
- else {
67
- return convertTypesOnInstance(value);
54
+ if (primitiveConverters.has(type)) {
55
+ return primitiveConverters.get(type)(value);
68
56
  }
57
+ return convertTypesOnInstance(value);
69
58
  };
70
59
  const deserializeValueFromType = (type, value) => {
71
60
  if (isConceptAs(type)) {
72
61
  return new type(value);
73
62
  }
74
63
  if (typeSerializers.has(type)) {
75
- return typeSerializers.get(type)(value);
64
+ const converter = typeSerializers.get(type);
65
+ return converter.read(value);
76
66
  }
77
- else {
78
- return JsonSerializer.deserialize(type, JSON.stringify(value));
67
+ if (primitiveSerializers.has(type)) {
68
+ return primitiveSerializers.get(type)(value);
79
69
  }
70
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
80
71
  };
81
72
  const deserializeValueFromField = (field, value) => {
82
73
  if (field.type === ValueMap) {
@@ -86,17 +77,19 @@ const deserializeValueFromField = (field, value) => {
86
77
  return new field.type(value);
87
78
  }
88
79
  if (typeSerializers.has(field.type)) {
89
- return typeSerializers.get(field.type)(value);
90
- }
91
- else {
92
- let type = field.type;
93
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
94
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
95
- const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
96
- type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
97
- }
98
- return JsonSerializer.deserialize(type, JSON.stringify(value));
80
+ const converter = typeSerializers.get(field.type);
81
+ return converter.read(value);
99
82
  }
83
+ if (primitiveSerializers.has(field.type)) {
84
+ return primitiveSerializers.get(field.type)(value);
85
+ }
86
+ let type = field.type;
87
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
88
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
89
+ const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
90
+ type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
91
+ }
92
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
100
93
  };
101
94
  const serializeMapKey = (key) => {
102
95
  if (key === undefined || key === null) {
@@ -123,11 +116,9 @@ const deserializeMapKey = (keyType, key) => {
123
116
  if (keyType === Boolean) {
124
117
  return key.toLowerCase() === 'true';
125
118
  }
126
- if (keyType === Date) {
127
- return new Date(key);
128
- }
129
119
  if (typeSerializers.has(keyType)) {
130
- return typeSerializers.get(keyType)(key);
120
+ const converter = typeSerializers.get(keyType);
121
+ return converter.read(key);
131
122
  }
132
123
  return JsonSerializer.deserialize(keyType, key);
133
124
  };
@@ -136,7 +127,8 @@ const deserializeMapValue = (valueType, value) => {
136
127
  return value;
137
128
  }
138
129
  if (typeSerializers.has(valueType)) {
139
- return typeSerializers.get(valueType)(value);
130
+ const converter = typeSerializers.get(valueType);
131
+ return converter.read(value);
140
132
  }
141
133
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
142
134
  };
@@ -158,6 +150,9 @@ const convertTypesOnInstance = (instance) => {
158
150
  if (typeConverters.has(instance.constructor)) {
159
151
  return serializeValueForType(instance.constructor, instance);
160
152
  }
153
+ if (primitiveConverters.has(instance.constructor)) {
154
+ return primitiveConverters.get(instance.constructor)(instance);
155
+ }
161
156
  const properties = Object.getOwnPropertyNames(instance);
162
157
  const converted = {};
163
158
  const derivedTypeId = DerivedType.get(instance.constructor);
@@ -178,6 +173,7 @@ const convertTypesOnInstance = (instance) => {
178
173
  });
179
174
  return converted;
180
175
  };
176
+ ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
181
177
  export class JsonSerializer {
182
178
  static DerivedTypeIdProperty = "_derivedTypeId";
183
179
  static serialize(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyO5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyQ5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
@@ -1,48 +1,41 @@
1
1
  'use strict';
2
2
 
3
3
  var ConceptAs = require('./ConceptAs.js');
4
- var Coordinate = require('./Coordinate.js');
5
4
  var DerivedType = require('./DerivedType.js');
6
5
  var Fields = require('./Fields.js');
7
- var Guid = require('./Guid.js');
8
- var TimeSpan = require('./TimeSpan.js');
9
6
  var ValueMap = require('./ValueMap.js');
7
+ var DateJsonConverter = require('./json/DateJsonConverter.js');
8
+ var GuidJsonConverter = require('./json/GuidJsonConverter.js');
9
+ var TimeSpanJsonConverter = require('./json/TimeSpanJsonConverter.js');
10
+ var PointJsonConverter = require('./json/PointJsonConverter.js');
11
+ var LineStringJsonConverter = require('./json/LineStringJsonConverter.js');
12
+ var PolygonJsonConverter = require('./json/PolygonJsonConverter.js');
13
+ var ValueMapJsonConverter = require('./json/ValueMapJsonConverter.js');
10
14
 
11
- const typeConverters = new Map([
15
+ const converters = [
16
+ new DateJsonConverter.DateJsonConverter(),
17
+ new GuidJsonConverter.GuidJsonConverter(),
18
+ new TimeSpanJsonConverter.TimeSpanJsonConverter(),
19
+ new PointJsonConverter.PointJsonConverter(),
20
+ new LineStringJsonConverter.LineStringJsonConverter(),
21
+ new PolygonJsonConverter.PolygonJsonConverter(),
22
+ new ValueMapJsonConverter.ValueMapJsonConverter()
23
+ ];
24
+ const typeConverters = new Map();
25
+ const typeSerializers = new Map();
26
+ for (const converter of converters) {
27
+ typeConverters.set(converter.type, converter);
28
+ typeSerializers.set(converter.type, converter);
29
+ }
30
+ const primitiveConverters = new Map([
12
31
  [Number, (value) => value],
13
32
  [String, (value) => value],
14
- [Boolean, (value) => value],
15
- [Date, (value) => value.toISOString()],
16
- [Guid.Guid, (value) => value?.toString() ?? ''],
17
- [TimeSpan.TimeSpan, (value) => value?.toString() ?? ''],
18
- [Coordinate.Coordinate, (value) => value?.toJSON() ?? null],
19
- [ValueMap.ValueMap, (value) => {
20
- const converted = {};
21
- for (const [key, mapValue] of value.entries()) {
22
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
23
- }
24
- return converted;
25
- }]
33
+ [Boolean, (value) => value]
26
34
  ]);
27
- const typeSerializers = new Map([
35
+ const primitiveSerializers = new Map([
28
36
  [Number, (value) => value],
29
37
  [String, (value) => value],
30
- [Boolean, (value) => value],
31
- [Date, (value) => new Date(value)],
32
- [Guid.Guid, (value) => Guid.Guid.parse(value.toString())],
33
- [TimeSpan.TimeSpan, (value) => TimeSpan.TimeSpan.parse(value.toString())],
34
- [Coordinate.Coordinate, (value) => {
35
- if (value === null || value === undefined) {
36
- throw new Error('Cannot deserialize null or undefined to Coordinate');
37
- }
38
- if (value.longitude === undefined || value.latitude === undefined) {
39
- throw new Error('Cannot deserialize Coordinate: longitude and latitude are required');
40
- }
41
- const coordinate = new Coordinate.Coordinate();
42
- coordinate.longitude = value.longitude;
43
- coordinate.latitude = value.latitude;
44
- return coordinate;
45
- }],
38
+ [Boolean, (value) => value]
46
39
  ]);
47
40
  const isConceptAs = (type) => {
48
41
  if (!type || !type.prototype)
@@ -64,22 +57,26 @@ const serializeValueForType = (type, value) => {
64
57
  return serializeValueForType(innerValue.constructor, innerValue);
65
58
  }
66
59
  if (typeConverters.has(type)) {
67
- return typeConverters.get(type)(value);
60
+ const converter = typeConverters.get(type);
61
+ return converter.write(value);
68
62
  }
69
- else {
70
- return convertTypesOnInstance(value);
63
+ if (primitiveConverters.has(type)) {
64
+ return primitiveConverters.get(type)(value);
71
65
  }
66
+ return convertTypesOnInstance(value);
72
67
  };
73
68
  const deserializeValueFromType = (type, value) => {
74
69
  if (isConceptAs(type)) {
75
70
  return new type(value);
76
71
  }
77
72
  if (typeSerializers.has(type)) {
78
- return typeSerializers.get(type)(value);
73
+ const converter = typeSerializers.get(type);
74
+ return converter.read(value);
79
75
  }
80
- else {
81
- return JsonSerializer.deserialize(type, JSON.stringify(value));
76
+ if (primitiveSerializers.has(type)) {
77
+ return primitiveSerializers.get(type)(value);
82
78
  }
79
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
83
80
  };
84
81
  const deserializeValueFromField = (field, value) => {
85
82
  if (field.type === ValueMap.ValueMap) {
@@ -89,17 +86,19 @@ const deserializeValueFromField = (field, value) => {
89
86
  return new field.type(value);
90
87
  }
91
88
  if (typeSerializers.has(field.type)) {
92
- return typeSerializers.get(field.type)(value);
93
- }
94
- else {
95
- let type = field.type;
96
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
97
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
98
- const candidates = [...field.derivatives, ...DerivedType.DerivedType.getDerivedTypesFor(field.type)];
99
- type = candidates.find(_ => DerivedType.DerivedType.get(_) == derivedTypeId) || type;
100
- }
101
- return JsonSerializer.deserialize(type, JSON.stringify(value));
89
+ const converter = typeSerializers.get(field.type);
90
+ return converter.read(value);
102
91
  }
92
+ if (primitiveSerializers.has(field.type)) {
93
+ return primitiveSerializers.get(field.type)(value);
94
+ }
95
+ let type = field.type;
96
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
97
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
98
+ const candidates = [...field.derivatives, ...DerivedType.DerivedType.getDerivedTypesFor(field.type)];
99
+ type = candidates.find(_ => DerivedType.DerivedType.get(_) == derivedTypeId) || type;
100
+ }
101
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
103
102
  };
104
103
  const serializeMapKey = (key) => {
105
104
  if (key === undefined || key === null) {
@@ -126,11 +125,9 @@ const deserializeMapKey = (keyType, key) => {
126
125
  if (keyType === Boolean) {
127
126
  return key.toLowerCase() === 'true';
128
127
  }
129
- if (keyType === Date) {
130
- return new Date(key);
131
- }
132
128
  if (typeSerializers.has(keyType)) {
133
- return typeSerializers.get(keyType)(key);
129
+ const converter = typeSerializers.get(keyType);
130
+ return converter.read(key);
134
131
  }
135
132
  return JsonSerializer.deserialize(keyType, key);
136
133
  };
@@ -139,7 +136,8 @@ const deserializeMapValue = (valueType, value) => {
139
136
  return value;
140
137
  }
141
138
  if (typeSerializers.has(valueType)) {
142
- return typeSerializers.get(valueType)(value);
139
+ const converter = typeSerializers.get(valueType);
140
+ return converter.read(value);
143
141
  }
144
142
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
145
143
  };
@@ -161,6 +159,9 @@ const convertTypesOnInstance = (instance) => {
161
159
  if (typeConverters.has(instance.constructor)) {
162
160
  return serializeValueForType(instance.constructor, instance);
163
161
  }
162
+ if (primitiveConverters.has(instance.constructor)) {
163
+ return primitiveConverters.get(instance.constructor)(instance);
164
+ }
164
165
  const properties = Object.getOwnPropertyNames(instance);
165
166
  const converted = {};
166
167
  const derivedTypeId = DerivedType.DerivedType.get(instance.constructor);
@@ -181,6 +182,7 @@ const convertTypesOnInstance = (instance) => {
181
182
  });
182
183
  return converted;
183
184
  };
185
+ ValueMapJsonConverter.ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
184
186
  class JsonSerializer {
185
187
  static DerivedTypeIdProperty = "_derivedTypeId";
186
188
  static serialize(value) {